您的位置:首页 > 其它

判断一颗二叉树是否为对称二叉树

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: