题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。

       求一棵树的镜像的过程:先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。

代码实现:   

public class BinaryTreeNode{
        int value;
        BinaryTreeNode left;
        BinaryTreeNode right;

        public BinaryTreeNode(int val,BinaryTreeNode leftNode,BinaryTreeNode rightNode){
               this.value=val;
               this.left=leftNode;
               this.right=rightNode;
        }
}  
public class Solution{
       public static void mirrorRecursively(BinaryTreeNode node){
             //检查当前结点是否为null,或两个子结点是否都为null
              if(node==null||(node.left==null&&node.right==null)){
                     return;
              }
              //交换左右子结点
              BinaryTreeNode tempNode=node.left;
              node.left=node.right;
              node.right=tempNode;
              //递归当前结点的左子结点
              if(node.left!=null){
                   mirrorRecursively(node.left);
              }
              //递归当前结点的右子结点
              if(node.right!=null){
                   mirrorRecursively(node.right);
              }              
       }

       public static void preorderTraversal(BinaryTreeNode node){
              if(node!=null){
                     System.out.print(node.value+" ");
                     preorderTraversal(node.left);
                     preorderTraversal(right);
              }
       }

       public static void main(String[] args){
               BinaryTreeNode node7=new BinaryTreeNode (11,null,null);
               BinaryTreeNode node6=new BinaryTreeNode (9,null,null);
               BinaryTreeNode node5=new BinaryTreeNode (10,node6,node7);
               BinaryTreeNode node4=new BinaryTreeNode (7,null,null);
               BinaryTreeNode node3=new BinaryTreeNode (5,null,null);
               BinaryTreeNode node2=new BinaryTreeNode (6,node3,node4);
               BinaryTreeNode node1=new BinaryTreeNode (8,node2,node5);

               preorderTraversal(node1);
               mirrorRecursively(node1);
               System.out.println();
               preorderTraversal(node1);
       }
}
 posted on 2018-10-19 20:18  会飞的金鱼  阅读(134)  评论(0)    收藏  举报