题目
输入一个二叉树,输出它的镜像。
思路
- 首先考虑对应单一一个结点,交换其左右结点需要一个引用temp来暂存一个结点,以便交换。此时要注意三种情况:两个结点都不为null;有一个结点为null;两个结点都为null。其实此处可以不管,虽说第三种不需要交换,但是需要增加对每个结点判断其左右结点是否为null,这时可以直接把这种情况也直接交换,以减少判断。
- 此外,注意鲁棒性,mirror()函数输入为null时,直接退出;
- 在主函数mirrorRecursively()中,当root不为null时,首先交换root结点,然后递归调用它的左右子结点。
public class Q19MirrorBiTree {
public static void mirrorRecursively(BiTreeNode root){
if (!(root==null)){
mirror(root);
mirrorRecursively(root.leftChild);
mirrorRecursively(root.rightChild);
}
}
public static void mirror(BiTreeNode root){
if (root==null)
return;
BiTreeNode temp=null;
temp=root.leftChild;
root.leftChild=root.rightChild;
root.rightChild=temp;
}
public static void main(String[] args) {
int[] array={2,1,3,0,5};
BiTreeNode root=BiTreeNode.create(array);
BiTreeNode.traverse(root);
mirror(root);
BiTreeNode.traverse(root);
}