62,614
社区成员
发帖
与我相关
我的任务
分享
package collections;
import java.util.Comparator;
/**
* 一般对于集合,使用泛型是一个很好的安全防护措施,相比较于Object,能够
* 约束使用者只能传递入单一类型的元素;
* @author crf
*
* @param <T>
*/
public class BinaryTree<T> {
@SuppressWarnings("hiding")
private class Node<T>{
private T ele;
private Node<T> TreeLeft = null;
private Node<T> TreeRight = null;
}
private Comparator<T> comp;
private Node<T> rootNode = null;
public BinaryTree(Comparator<T> comp){
this.comp = comp;
}
public void addNode(T ele){
addNode(createNode(ele),rootNode);
}
public void showTree(){
showTree(rootNode);
}
/**
* for Test
* @param args
*/
public static void main(String[] args) {
BinaryTree<Integer> bt = new BinaryTree<>(new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
bt.addNode(new Integer(1));
bt.addNode(new Integer(2));
bt.addNode(new Integer(3));
System.out.println(bt.rootNode);
bt.showTree();
}
/******************************* private method area *****************************/
/**
* 生成节点,该方法为私有,只能系统生成;
* @param ele
* @return
*/
private Node<T> createNode(T ele){
Node<T> thNode = new Node<>();
thNode.ele = ele;
return thNode;
}
/**
* 为了便于递归;
* @param newNode
* @param comp
* @param node
*/
private void addNode(Node<T> newNode,Node<T> node){
if(node==null) node = newNode;
else if(comp.compare(node.ele, newNode.ele)>0) addNode(newNode,node.TreeRight);
else addNode(newNode,node.TreeLeft);
}
/**
* 为了便于递归;
* @param node
*/
private void showTree(Node<T> node){
System.out.println("***************** show tree ****************");
if(node!=null){
System.out.println(node.ele);
if(node.TreeLeft != null) showTree(node.TreeLeft);
if(node.TreeRight != null) showTree(node.TreeRight);
}
}
}