判断一颗二叉树是否为对称二叉树
2017-09-28 10:01
225 查看
本题源自剑指offer
-----------------------------------------------------------------------
可以自定以一种对称前序遍历,即先遍历父节点,再访问右子节点,在访问左子节点,NULL节点也访问,将得到的序列和前序遍历比较,相同就说明二叉树是对称的。
递归:
bool isSymmetrical(TreeNode* pRoot)
{
return IsSymmetricalCore(pRoot,pRoot);
}
bool IsSymmetricalCore(TreeNode* pRoot1,TreeNode* pRoot2){
if(pRoot1==NULL && pRoot2==NULL)
return true;
if(pRoot1==NULL || pRoot2==NULL)
return false;
if(pRoot1->val!=pRoot2->val)
return false;
return IsSymmetricalCore(pRoot1->left,pRoot2->right)&&IsSymmetricalCore(pRoot1->right,pRoot2->left);
}
迭代:
bool isSymmetrical(TreeNode* pRoot)
{
if(pRoot==NULL)
return true;
TreeNode* left=pRoot->left;
TreeNode* right=pRoot->right;
queue<TreeNode*> q1,q2;
q1.push(left);
q2.push(right);
while(!q1.empty()&&!q2.empty()){
left=q1.front();
q1.pop();
right=q2.front();
q2.pop();
if(left==NULL&&right==NULL)
continue;
if(left==NULL||right
4000
==NULL)
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;
}
-----------------------------------------------------------------------
可以自定以一种对称前序遍历,即先遍历父节点,再访问右子节点,在访问左子节点,NULL节点也访问,将得到的序列和前序遍历比较,相同就说明二叉树是对称的。
递归:
bool isSymmetrical(TreeNode* pRoot)
{
return IsSymmetricalCore(pRoot,pRoot);
}
bool IsSymmetricalCore(TreeNode* pRoot1,TreeNode* pRoot2){
if(pRoot1==NULL && pRoot2==NULL)
return true;
if(pRoot1==NULL || pRoot2==NULL)
return false;
if(pRoot1->val!=pRoot2->val)
return false;
return IsSymmetricalCore(pRoot1->left,pRoot2->right)&&IsSymmetricalCore(pRoot1->right,pRoot2->left);
}
迭代:
bool isSymmetrical(TreeNode* pRoot)
{
if(pRoot==NULL)
return true;
TreeNode* left=pRoot->left;
TreeNode* right=pRoot->right;
queue<TreeNode*> q1,q2;
q1.push(left);
q2.push(right);
while(!q1.empty()&&!q2.empty()){
left=q1.front();
q1.pop();
right=q2.front();
q2.pop();
if(left==NULL&&right==NULL)
continue;
if(left==NULL||right
4000
==NULL)
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;
}
相关文章推荐
- 判断一颗二叉树是否对称
- (树)判断一颗二叉树是否为镜像对称
- 判断一颗二叉树是否对称
- 14.剑指offer-判断一颗二叉树是否对称
- 判断一颗二叉树是否是完全二叉树
- 面试题17:如何判断二叉树是否是对称二叉树?
- 判断二叉树是否对称
- 判断一颗二叉树是否镜像对称
- PHP实现判断二叉树是否对称的方法
- 【LeetCode题目记录-11】判断二叉树是否是镜像的(对称的)
- 判断一颗二叉树树是否为AVL树
- 剑指offer-判断二叉树是否对称
- LeetCode(Symmetric Tree)判断二叉树是否是对称的
- Leetcode-Symmetric Tree——判断二叉树是否对称
- 二叉树系列 - [LeetCode] Symmetric Tree 判断二叉树是否对称,递归和非递归实现
- 二叉树--判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树。
- -判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 【判断一个节点是否在一棵二叉树中】/【判断一颗二叉树是是否是另一颗树的子树】
- 判断一个节点是否在一棵二叉树中&判断一颗二叉树是是否是另一颗树的子树
- 判断一棵二叉树是否为对称的 java