package code01;
/**
* Created by yaoyuan on 2017/3/10.
*/
public class BinaryTree<T extends Comparable<T>>{
private BinaryTreeNode root = null;
private int size = 0;
public BinaryTreeNode createBinaryTree(T[] array){
for(T data : array){
this.insert(data);
}
return this.root;
}
// recursive way,
// t is the node that roots the subtree.
public BinaryTreeNode<T> insert(T data, BinaryTreeNode t){
if(t == null){
return new BinaryTreeNode<T>(data);
}
int comparator = ((T) t.data).compareTo(data);
if(comparator > 0){
t.left = insert(data,t.right);
}else if(comparator < 0){
t.right = insert(data,t.left);
}else {
// do nothing
}
return t;
}
//loop way
public void insert(T data){
if(this.root == null){
BinaryTreeNode node = new BinaryTreeNode(data);
this.root = node;
this.size ++;
return;
}
BinaryTreeNode cursor = this.root;
while (cursor != null){
if(data.compareTo((T) cursor.data) <= 0){
if(cursor.left == null) {
cursor.left = new BinaryTreeNode(data);
return;
}
cursor = cursor.left;
}
if(data.compareTo((T) cursor.data) > 0){
if(cursor.right == null) {
cursor.right = new BinaryTreeNode(data);
return;
}
cursor = cursor.right;
}
}
this.size ++;
}
public void leftOrderScan(BinaryTreeNode cursor){
if(cursor == null){
return;
}
leftOrderScan(cursor.left);
System.out.println(cursor.data.toString() + " ");
leftOrderScan(cursor.right);
}
public BinaryTreeNode getRoot(){
return this.root;
}
class BinaryTreeNode<T> {
private T data;
private BinaryTreeNode left;
private BinaryTreeNode right;
public BinaryTreeNode(T data, BinaryTreeNode left, BinaryTreeNode right) {
this.left = right;
this.right = left;
this.data = data;
}
public BinaryTreeNode(T data) {
this.left = null;
this.right = null;
this.data = data;
}
}
}