【java 面试100】15 :输入一颗二元查找树,将该树转换为它的镜像

来源:互联网 发布:mac 广告拦截插件 编辑:程序博客网 时间:2024/05/29 20:02

题目:输入一颗二元查找树,将该树转换为它的镜像,
即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
用递归和循环两种方法完成树的镜像转换。  
例如输入:
  8
  / /
  6 10
 // //
5 7 9 11

输出:
   8
  / /
 10 6
 // //
11 9 7 5

public class MirrorBST {public void mirror(BSTreeNode root){if(root==null)return;BSTreeNode p=root.lefTreeNode;root.lefTreeNode=root.rightTreeNode;root.rightTreeNode=p;mirror(root.lefTreeNode);mirror(root.rightTreeNode);}public void midTraverse(BSTreeNode root){if(root==null) return;midTraverse(root.lefTreeNode);System.out.print(root.value+" ");midTraverse(root.rightTreeNode);}public static void main(String[] args) {BSTreeNode root=new BSTreeNode(8);BSTreeNode p6=new BSTreeNode(6);BSTreeNode p10=new BSTreeNode(10);BSTreeNode p5=new BSTreeNode(5);BSTreeNode p7=new BSTreeNode(7);BSTreeNode p9=new BSTreeNode(9);BSTreeNode p11=new BSTreeNode(11);root.lefTreeNode=p6;root.rightTreeNode=p10;p6.lefTreeNode=p5;p6.rightTreeNode=p7;p10.lefTreeNode=p9;p10.rightTreeNode=p11;MirrorBST mirrorBST=new MirrorBST();mirrorBST.midTraverse(root);mirrorBST.mirror(root);System.out.println();mirrorBST.midTraverse(root);}}class BSTreeNode{int value;BSTreeNode lefTreeNode;BSTreeNode rightTreeNode;public BSTreeNode(int data){this.value=data;}}

结果:5 6 7 8 9 10 11 
11 10 9 8 7 6 5 

原创粉丝点击