二叉树的镜像
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5
思路:递归思想,先交换根节点的左右子树的位置,然后向下递归,把左右子树的根节点作为下次循环的根节点。
代码:
public void Mirror(TreeNode root) {
TreeNode tem;
if(root!=null&&(root.left!=null||root.right!=null)){
tem=root.left;
root.left=root.right;
root.right=tem;
Mirror(root.left);
Mirror(root.right);
}
}
分析:
1)当根节点不为空,且左右节点的任意一个存在,则可以进行交换。例如c换为d
if(root!=null&&(root.left!=null||root.right!=null))
一、例如,如图所示几种二叉树
(1)空二叉树——如图(a);
(2)只有一个根结点的二叉树——如图(b);
(3)只有左子树——如图(c);
(4)只有右子树——如图(d);
(5)完全二叉树——如图(e)。
二、交换左右根节点,则根节点原来的左右孩子都要跟着移动(随着亲人走动)
执行完 tem=root.left;
root.left=root.right;
root.right=tem;后,如下图
三、Mirror();
1)执行Mirror(root.left);
2)执行 Mirror(root.right);