树的概念
树是一个非常重要的数据结构。
在有序的数组中进行查找时,最快的方式是二分查找(时间复杂度为
l
o
g
(
n
)
log(n)
log(n));但是每当添加/删除新元素时,时间复杂度就变成了
O
(
n
)
O(n)
O(n)。为了方便对数据进行查找、添加和删除,为此,有人设计了一种名为二叉查找树(binary search tree)的数据结构。如下图所示:
操作 | 数组 | 二叉查找树 |
---|---|---|
随机访问 | O ( 1 ) O(1) O(1) | O ( l o g n ) O(logn) O(logn) |
查找 | O ( n ) O(n) O(n) | O ( l o g n ) O(logn) O(logn) |
插入 | O ( n ) O(n) O(n) | O ( l o g n ) O(logn) O(logn) |
删除 | O ( n ) O(n) O(n) | O ( l o g n ) O(logn) O(logn) |
二叉树的平均访问时间为 O ( l o g n ) O(logn) O(logn),假设二叉树像下面这样处于不平衡状态,时间复杂度会是 O ( n ) O(n) O(n):
参考资料
- 《算法新解》