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

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

定义二元查找树的结点为:

struct BSTreeNode // a node in the binary search tree (BST)
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};

 

 

package com.microsoft;




public class ChangeBinarySearchTree {
private Node root;
public ChangeBinarySearchTree(int[]data){
for(int i=0;i<data.length;i++){
Node node=new Node();
node.setValue(data[i]);
insert(node);
}
}
public void insert(int value){
Node node=new Node();
node.setValue(value);
insert(node);
}
public void change(Node node){
if(node==null){
return;
}
Node n=node.left;
node.left=node.right;
node.right=n;
change(node.left);
change(node.right);

}
public void change(){
change(root);
}
/**
* 插入节点
* @param node
*/
public void insert(Node node){
Node y=null;
Node x=root;
while(x!=null){
y=x;
if(node.value<x.value){
x=x.left;
}else{
x=x.right;
}
}
node.parent=y;
if(y==null){
root=node;
}else if(y.value>node.value){
y.left=node;
}else{
y.right=node;
}
}
private static class Node{
private Node left;
private Node right;
private Node parent;
private int value;
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
public Node getParent() {
return parent;
}
public void setParent(Node parent) {
this.parent = parent;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}

}

public void print() {
Node h = this.root;
this.print(0, h);
}

private void print(int level, Node node) {
if(node==null){
return;
}
for (int i = 0; i < level; i++) {
System.out.format(" ");
}
System.out.format("|");
for (int i = 0; i < level; i++) {
System.out.format("-");
}

System.out.format("%d%n", node.value);
print(level + 1, node.left);
print(level+1,node.right);

}

public static void main(String[] args) {
int [] data=new int[]{8,3,2,6,3,9,1};
ChangeBinarySearchTree tree=new ChangeBinarySearchTree(data);
tree.print();
tree.change();
tree.print();

}

}