几种树形结构的比较
1.二叉查找树 (BST Binary Search Tree)
1.若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值。
2. 若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值。
3.任意结点的左、右子树也分别为二叉搜索树。
优点: 二叉搜索树是能够高效地进行如下操作的数据结构。
1.插入一个数值
2.查询是否包含某个数值
3.删除某个数值
缺点:
如果我们插入的数据刚好是有序的,这个时候 二叉树 会变成链表( “斜树”),时间复杂度会退化成 O(n)。
复杂度:
不论哪一种操作,所花的时间都和树的高度成正比。因此,如果共有n个元素,那么平均每次操作需要O(logn)的时间
算法实现:
二叉排序树的操作主要有:
1.查找:递归查找是否存在key。
2.插入:原树中不存在key,插入key返回true,否则返回false。
3.构造:循环的插入操作。
4.删除:
(1)叶子节点:直接删除,不影响原树。
(2)仅仅有左或右子树的节点:节点删除后,将它的左子树或右子树整个移动到删除节点的位置就可以,子承父业。
(3)既有左又有右子树的节点:找到须要删除的节点p的直接前驱或者直接后继s,用s来替换节点p,然后再删除节点s。
2.平衡二叉树
平衡树(Balance Tree,BT) 指的是,任意节点的子树的高度差都小于等于1
https://www.cs.usfca.edu/~galles/visualization/AVLtree.html
为了保持平衡,AVL 树在插入和更新数据的时候执行了一系列的计算和调整的 操作,利用左旋跟右旋等保证平衡。
性质:
高为h的BT, 其结点的数目在2(h+1)-1和1/2(3(h+1)−1)之间, 叶的数目在2h和3h之间