cpp刷题打卡记录22——翻转二叉树
翻转二叉树法一利用层序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: TreeNode* invertTree(TreeNode* root) { queueTreeNode* q; if(root ! NULL){ q.push(root); } while(!q.empty()){ int size q.size(); for(int i 0; isize; i){ TreeNode* node q.front(); q.pop(); swap(node-left, node-right); if(node-left){ q.push(node-left); } if(node-right){ q.push(node-right); } } } return root; } };法二利用前序遍历class Solution { public: TreeNode* invertTree(TreeNode* root) { stackTreeNode* st; if(root NULL){ return root; } st.push(root); while(!st.empty()){ TreeNode* node st.top(); st.pop(); swap(node-left, node-right); if(node-right){ st.push(node-right); } if(node-left){ st.push(node-left); } } return root; } };对称二叉树class Solution { public: bool isSymmetric(TreeNode* root) { queueTreeNode* q; if(root ! NULL){ q.push(root); } while(!q.empty()){ int size q.size(); vectorint v; for(int i 0; isize; i){ TreeNode* node q.front(); q.pop(); if(node NULL){ v.push_back(INT_MIN); } else{ v.push_back(node-val); if(node-left){ q.push(node-left); } else{ q.push(NULL); } if(node-right){ q.push(node-right); } else{ q.push(NULL); } } } vectorint tmp v; reverse(tmp.begin(), tmp.end()); if(v ! tmp){ return false; } } return true; } };一定要注意并不能访问NULL-left 或 NULL-right。且注意这不是判断左右是否相等是轴对称。思路是利用层序算法一层一层判断并且当节点为空时也要放在队列和最终比较的数组中。相同的树class Solution { public: vectorint cengxubianli(TreeNode* root){ queueTreeNode* q; vectorint result; if(root ! NULL){ q.push(root); } while(!q.empty()){ int size q.size(); for(int i 0; isize; i){ TreeNode* node q.front(); q.pop(); if(node NULL){ result.push_back(INT_MIN); } else{ result.push_back(node-val); if(node-left){ q.push(node-left); } else q.push(NULL); if(node-right){ q.push(node-right); } else q.push(NULL); } } } return result; } bool isSameTree(TreeNode* p, TreeNode* q) { vectorint tree1; vectorint tree2; tree1 cengxubianli(p); tree2 cengxubianli(q); if(tree1 tree2){ return true; } else{ return false; } } };若两个数按照同样的遍方法遍历一遍得到的结果一样那么树就是相同的但一定要注意空节点也得算上。例如这两个树是不相同的但使用层序遍历时不输出空节点的话就会导致输出结果是一样的误判断为相同将空节点输出为null就可以避免这种情况。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2430615.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!