package basic; import java.util.Comparator; /** * 实现二叉排序树,使左节点的值,始终父节点小,右节点的值,始终比父节点大 * @author Wayss * 2017-02-25 */ public class MySortBinaryTree { public BinaryTreeNode root = new BinaryTreeNode(); /** * 1. 添加时,先判断与root节点值的大小 * 2. insert的值小于root的值,则插入到root的左边。 * 3. insert的值大于root的值,则插入到root的右边。 * PS:目前只支持Integer类型的对象插入 * @param val */ public void add(Integer val){ BinaryTreeNode treeNode = new BinaryTreeNode(val); insert(root, treeNode); } private void insert(BinaryTreeNode node, BinaryTreeNode insertNode){ int result = compare((Integer)insertNode.getData(),(Integer)node.getData()); if(0 == result){ //相等的话,当重复数据,不插了.呵呵 } //insert的值小于root的值,则插入到root的左边。 //如果左节点有值,则递归 if(-1 == result){ if(node.getLeft() != null){ insert(node.getLeft(), insertNode); }else{ node.setLeft(insertNode); } } //insert的值大于root的值,则插入到root的右边。 if(1 == result){ if(node.getRight() != null){ insert(node.getRight(), insertNode); }else{ node.setRight(insertNode); } } } public MyArrayList getValue(){ MyArrayList malist = new MyArrayList(); getTreeValue(root,malist); return malist; } private void getTreeValue(BinaryTreeNode node,MyArrayList list){ //遍历左子数 if(node.getLeft() != null){ getTreeValue(node.getLeft(),list); } list.add(node.getData()); //遍历右子数 if(node.getRight() != null){ getTreeValue(node.getRight(),list); } } public static int compare(Integer i1, Integer i2){ if(i1 < i2){ return -1; }else if(i1 == i2){ return 0; }else { return 1; } } }