题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
思路分析
其实很多算法题都是自己吓自己,原因是太抽象,那么把他具体化呢?
画个图就好分析了,看上面的图,仔细观察可知,左、右子节点换了,然后对应下面的左右子节点也是对换位置了....
1)先交换根节点的左、右子树;
2)交换值为 10 的节点的左右子树;
3)交换值为 6 的节点的左右子树;
依次类推,可以用递归!!!
注意:老规矩,别忘判断空节点!!!
public class Solution {
public void Mirror(TreeNode root) {
if(root == null) //判断树是否为空
return;
if(root.left == null && root == root.right)//判断左右树是否为空
return;
TreeNode pTemp = root.left;//把左子树节点赋值给临时节点
root.left = root.right;//右子树节点赋值给左节点
root.right = pTemp;//把左子树之前的存的值赋值给右子树节点
if(root.left != null)//若左边子树还有节点,继续遍历
Mirror(root.left);
if(root.right != null)//若右边子树还有节点,继续遍历
Mirror(root.right);
}
}
参考文献:《剑指offer》
网友评论