- 输出一个二叉树的镜像
递归交换左右子树的节点。
代码:
void MirrorBinaryTree(TreeNode* root)
{
//空树,叶子节点直接返回
if(root == NULL || (root->left==NULL && root->right==NULL)
{
return;
}
//交换左右子树
TreeNode* tmp = root->left;
root->left = root->right;
root->right = tmp;
//再次遍历左右子树
MirrorBinaryTree(root->left);
MirrorBinaryTree(root->right);
}
- 判断一棵树是否为对称二叉树(即二叉树的镜像与原二叉树相同)
二叉树是一个对称二叉树的条件:
任意二叉树的节点的左右子树都是对称的。
T1,T2两棵树是对称的条件:
T1,T2根节点相等 && T1.left与T2.right对称 && T1.right与T2.left对称。
bool isSymmetric(TreeNode* root) {
if(root == NULL){
return true;
}
return isSymmetricHelp(root->left, root->right);
}
bool isSymmetricHelp(TreeNode* t1, TreeNode* t2)
{
if(t1 == NULL && t2 == NULL)
{
return true;
}
if(t1 == NULL || t2 == NULL)
{
return false;
}
if(t1->val != t2->val)
{
return false;
}
return isSymmetricHelp(t1->left, t2->right) &&
isSymmetricHelp(t1->right, t2->left);
}