只测试了一组数据,有可能是错的。。。
public class BinarySortTreeDemo {
public static void main(String[] args) {
int[] array = {7, 3, 10, 12, 5, 1, 9};
Node root = arrayToBinarySortTree(array);
root.infixOrder();
}
public static Node arrayToBinarySortTree(int[] array) {
Node root = new Node(array[0]);
int len = array.length;
int cur = 0;
Node curNode = null;
for (int i = 1; i < len; i++) {
cur = array[i];
curNode = root;
//判断是否找到了位置
boolean flag = false;
while (true) {
while (cur <= curNode.num) {
if (curNode.left != null) {
curNode = curNode.left;
} else {
curNode.left = new Node(cur);
flag = true;
break;
}
}
while (cur > curNode.num) {
if (curNode.right != null) {
curNode = curNode.right;
} else {
curNode.right = new Node(cur);
flag = true;
break;
}
}
if (flag) {
break;
}
}
}
return root;
}
}
class Node {
public int num;
public Node left;
public Node right;
public Node(int num) {
this.num = num;
}
@Override
public String toString() {
return num + "";
}
public void infixOrder() {
if (this.left != null) {
this.left.infixOrder();
}
System.out.print("=>" + this);
if (this.right != null) {
this.right.infixOrder();
}
}
}