package datastructure.basic; /** * Created by Haochen on 2017/2/24. * TODO: */ public class BinarySortedTree<T extends Comparable> { private BinaryTreeNode root = null; public void traverse(Visitor visitor) { traverse(root, visitor); } private void traverse(BinaryTreeNode node, Visitor visitor) { if (node == null) { return; } traverse(node.getLeft(), visitor); visitor.visit(node); traverse(node.getRight(), visitor); } public interface Visitor { void visit(BinaryTreeNode node); } //不递归的写法 public void add(T o) { //根节点空,直接加入 if (root == null) { root = new BinaryTreeNode(); root.setData(o); } else { BinaryTreeNode target = root; //从根结点不断向下比较target和o,o小则往左,o大则往右,相等不加入 while (true) { int compare = o.compareTo(target.getData()); if (compare == 0) {//相等不加入 return; } else if (compare < 0) {//o小往左 if (target.getLeft() == null) {//左空则加入 target.setLeft(new BinaryTreeNode()); target.getLeft().setData(o); return; } else {//不空继续比较 target = target.getLeft(); } } else {//o大往右 if (target.getRight() == null) { target.setRight(new BinaryTreeNode()); target.getRight().setData(o); return; } else { target = target.getRight(); } } } } } }