SymmetricTree
来源:互联网 发布:cad线切割编程软件 编辑:程序博客网 时间:2024/06/08 01:00
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \3 4 4 3
But the following is not:
1 / \ 2 2 \ \ 3 3
方法1:先求镜像,然后比较二者是否是相同树;
方法2:中序遍历,然后比较对称节点,比较的时候除了比较节点值外还要比较该节点左右子树的值是否对称,否则,如{1,2,3,#,2,#}会报错;
代码如下:
void Inorder(TreeNode *root, vector<TreeNode *> &ivals) { if(root == NULL) return; Inorder(root->left, ivals); ivals.push_back(root); Inorder(root->right, ivals); } bool isequal(TreeNode *node1, TreeNode *node2) { if((node1 == NULL&&node2 != NULL)||(node1 != NULL&&node2 == NULL)) return false; if(node1==NULL&&node2 == NULL) return true; if(node1->val == node2->val) return true; return false; } bool isSymmetric(TreeNode *root) { if(root == NULL) return true; vector<TreeNode *> vals; Inorder(root, vals); int len = vals.size(); for(int i = 0;i<len/2;i++) { if(vals[i]->val == vals[len-1-i]->val) { bool eq1 = isequal(vals[i]->left, vals[len-1-i]->right); bool eq2 = isequal(vals[i]->right, vals[len-1-i]->left); if(eq1&&eq2) continue; else return false; } else { return false; } } return true; }
方法3:层序遍历,构建队列,然后比较每层是否对称。
0 0
- SymmetricTree
- leetcode101.SymmetricTree
- 【leetcode_easy】101-SymmetricTree
- Bug 10121589 ORA-600 [kjbmprlst:shadow]
- tar命令详解
- eclipse中ADT离线安装方法
- (前、中、后)序遍历二叉树的递归、非递归算法!
- C++ 将字符串转换成date类型的数据
- SymmetricTree
- GNU对C语言的扩展---结构体
- 珍惜着美好的时光
- [Java][MyBatis]mapperLocations属性通配符的使用
- 在iOS开发中自动获取当前的位置(GPS定位)
- 用户配置文件状态变成“备份”
- C++ 关于断点续传的方法,使用CURL技术
- HDOJ_就这么个烂题总是WA先放这把
- Ubuntu 12.10环境下Mochiweb安装