树型结构一直是一种很重要的数据结构,我们知道二叉查找树BST提供了一种快速查找,插入的数据结构。相比散列表来说BST占用空间更小,对于数据量较大和空间要求较高的场合,BST就显得大有用处了。BST的大部分操作平均运行时间为O(logN),但是如果树是含N个结点的线性链,则最坏情况运行时间会变为O(N)。为了避免出现最坏情况我们给它增加一些平衡条件, 使它的高度最多为2log(N+1),最坏情况下运行是间花费也接近O(logN)。
二叉搜索树是一种很基础的树,后续的AVL、红黑树等都是在此基础上增加了一些其他限制条件形成的。
public class Tree {
Tree left, right;
int item;
public Tree(Tree left, Tree right, int item) {
this.left = left;
this.right = right;
this.item = item;
}
public void insert(int item) {
Tree root = this;
Tree node = new Tree(null, null, item);
while (true) {
if (root.item == item)
return;
if (root.item > item) {
if (root.left == null) {
root.left = node;
return;
} else
root = root.left;
} else {
if (root.right == null) {
root.right = node;
return;
}
root = root.right;
}
}
}
public void preorderTraversal() {
System.out.print(this.item + " ");
if (left != null)
left.preorderTraversal();
if (right != null)
right.preorderTraversal();
}
public void inorderTraversal() {
if (left != null)
left.inorderTraversal();
System.out.print(this.item + " ");
if (right != null)
right.inorderTraversal();
}
public void postorderTraversal() {
if (left != null)
left.postorderTraversal();
if (right != null)
right.postorderTraversal();
System.out.print(this.item + " ");
}
public static void main(String[] args) {
System.out.println("Hello World!");
Tree mapleTree = new Tree(null, null, 10);
mapleTree.insert(5);
mapleTree.insert(20);
mapleTree.insert(30);
mapleTree.insert(7);
mapleTree.insert(15);
mapleTree.insert(19);
mapleTree.preorderTraversal();
System.out.println();
mapleTree.inorderTraversal();
System.out.println();
mapleTree.postorderTraversal();
System.out.println();
}
}