剑指offer面试题[59]-对称的二叉树
来源:互联网 发布:java连接sqlserver代码 编辑:程序博客网 时间:2024/05/19 00:40
题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: bool isSymmetrical(TreeNode* pRoot) { if(pRoot==NULL) return true; TreeNode* p1=pRoot; TreeNode* p2=pRoot; PreSymmetrical(p1); //标准的前序遍历,先遍历左子树,再根结点,最后遍历右子树 DefineSymmetrical(p2); //自定义的对称前序遍历,先遍历右子树,再根结点,最后遍历 for(int i=0;i<vec1.size();i++) //左子树注意一些特殊情况,比如所有的元素都是相同的,两种 { //遍历结果可能是一样的,事实上是非对阵的(比如奇数个相同 if(vec1[i]!=vec2[i]) //的值明显不是对阵的,但两种遍历结果相同),因此我们将所 return false; //有的结点的左右结点为空时记为NULL。 } return true; } void PreSymmetrical(TreeNode*p1) { if(p1==NULL) { vec1.push_back(0); return; } vec1.push_back(p1->val); PreSymmetrical(p1->left); PreSymmetrical(p1->right); } void DefineSymmetrical(TreeNode*p2) { if(p2==NULL) { vec2.push_back(0); return; } vec2.push_back(p2->val); DefineSymmetrical(p2->right); DefineSymmetrical(p2->left); }private: vector<int> vec1,vec2; //vec1和vec2分别用来存储前序遍历和自定义对称前序遍历的结果};
阅读全文
1 0
- 【剑指Offer学习】【面试题59:对称的二叉树】
- 剑指offer-面试题59:对称的二叉树
- 剑指offer--面试题59:对称的二叉树
- (剑指Offer)面试题59:对称的二叉树
- 剑指offer-面试题59-对称的二叉树
- 剑指offer 面试题59 对称的二叉树
- (剑指Offer)面试题59:对称的二叉树
- 剑指offer面试题[59]-对称的二叉树
- 【剑指offer】面试题28:对称的二叉树
- 剑指offer--面试题28:对称的二叉树
- 剑指Offer面试题59:对称二叉树 Java实现
- 【剑指Offer】面试题59:对称二叉树
- 《剑指Offer》学习笔记--面试题59:对称的二叉树
- 剑指offer面试题59 对称的二叉树(java实现)
- 剑指offer——面试题59:对称的二叉树
- 面试题59:对称的二叉树
- 面试题59:对称的二叉树
- 面试题59-对称的二叉树
- 【面经笔记】TCP
- linux 安装nginx
- maven配置文件pom.xml详解
- HDU 6034 Balala Power!【贪心】
- lanqiao 小白算法练习 合并石子 区间dp
- 剑指offer面试题[59]-对称的二叉树
- JVM运行时内存划分
- Ubuntu install Google-Chrome
- 中序线索化链表
- codeforces 813C The Tag Game
- 在textview周围画图
- mysql数据库索引的创建语句
- 三元上升子序列 洛谷p1637
- Uncowed Forces