1.二叉排序树
左子树上的关键字都小于根结点关键字,右子树上的关键字都大于根结点关键字,查找时间复杂度为O(log₂n)
二叉排序树构造方法:
public void bstInsert(BiTree b, int k) {
if (b == null) {
b = new BiTree(k);
return;
}
if (k == b.element) return;
if (k < b.element) bstInsert(b.lchild, k);
else bstInsert(b.rchild, k);
}
public BiTree buildBST(int[] a, int n) {
BiTree b = new BiTree(a[1]);
for (int i = 2; i <= n; i++) {
bstInsert(b, a[i]);
}
return b;
}
删除结点的方法:
(1)右子树空,用左子树填补
(2)左子树空,用右子树填补
(3)左右子树都不空,用右子树的中序第一个子结点填补
2.平衡二叉树
任意结点左右子树的高度差不超过1,能更好地提升查找性能
3.哈夫曼树
所有初始结点都看成一棵树的根结点,每次从森林中选出两个根结点关键字最小的树组成一个新树的左右子树,新树的根结点关键字为左右子树根结点关键字之和。最后关键字越小的结点,离根结点的距离越远,则整棵树的带权路径长度最小
哈夫曼编码:字符出现次数为权重,0代表左分支,1代表右分支,能为字符串构造前缀编码,使得编码总长度最短