您的位置:首页 > 职场人生

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

2012-10-15 11:08 295 查看
题目:输入一颗二元查找树,将该树转换为它的镜像,

即在转换后的二元查找树中,左子树的结点都大于右子树的结点。

用递归和循环两种方法完成树的镜像转换。

例如输入:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐