对称的二叉树
来源:互联网 发布:中国大学生网络党课 编辑:程序博客网 时间:2024/06/05 07:08
题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
/*思路:首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同
* 左子树的右子树和右子树的左子树相同即可,采用递归
* 非递归也可,采用栈或队列存取各级子树根节点
方法一:递归
/*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) return true; return comparetree(pRoot->left,pRoot->right); } bool comparetree(TreeNode* left, TreeNode* right) { if(left==NULL) return right==NULL; if(right==NULL) return false; if(left->val!=right->val) return false; return comparetree(left->left,right->right)&&comparetree(left->right,right->left); }};
方法二:循环,利用队列存储
class Solution {public: bool isSymmetrical(TreeNode* pRoot) { if(root==NULL) return true; queue<TreeNode*> q1,q2; TreeNode *left,*right; q1.push(root->left); q2.push(root->right); while(!q1.empty() and !q2.empty()) { left = q1.front(); q1.pop(); right = q2.front(); q2.pop(); //两边都是空 if(NULL==left && NULL==right) continue; //只有一边是空 if(NULL==left||NULL==right) return false; if (left->val != right->val) return false; q1.push(left->left); q1.push(left->right); q2.push(right->right); q2.push(right->left); } return true; }};
阅读全文
0 0
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 对称的二叉树
- 使用SSM框架整合时,无法创建XXXXBean
- Asp.Net MVC 5使用Identity之简单的注册和登陆
- 小白的踩坑记录——socket.io-解决多进程
- 动态内存开辟
- spring-Scheduled
- 对称的二叉树
- Java多线程--Exchanger(二)
- Oracle之JAVA数据导出工具-yellowcong
- 欢迎使用CSDN-markdown编辑器
- CentOS 中 nginx 负载均衡和反向代理的搭建 阅读 2449
- 高逼格Mac应用程序、软件分享【主要面向开发者和设计师】
- vb在串口通信中运行时错误‘380’无效属性值
- pip install scikit-image win安装错误
- Java多线程--同步计数器CountDownLatch