Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a0b3c30

Browse files
committed
update 二叉搜索树文档
1 parent f9adbba commit a0b3c30

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

‎assets/doc/12_JavaScript数据结构与算法(十二)二叉搜索树.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,3 +634,32 @@ getSuccessor(delNode) {
634634
return successor;
635635
}
636636
```
637+
638+
# 平衡树
639+
640+
二叉搜索树的缺陷:当插入的数据是有序的数据,就会造成二叉搜索树的深度过大。比如原二叉搜索树由 11 7 15 组成,如下图所示:
641+
642+
![](https://cdn.jsdelivr.net/gh/XPoet/image-hosting/JavaScript数据结构与算法/image.6xy1t7bijis0.png)
643+
644+
当插入一组有序数据:6 5 4 3 2 就会变成深度过大的搜索二叉树,会严重影响二叉搜索树的性能。
645+
646+
![](https://cdn.jsdelivr.net/gh/XPoet/image-hosting/JavaScript数据结构与算法/image.5xvlspn12p80.png)
647+
648+
非平衡树
649+
650+
- 比较好的二叉搜索树,它的数据应该是左右均匀分布的。
651+
- 但是插入连续数据后,二叉搜索树中的数据分布就变得不均匀了,我们称这种树为非平衡树。
652+
- 对于一棵平衡二叉树来说,插入/查找等操作的效率是 O(log n)。
653+
- 而对于一棵非平衡二叉树来说,相当于编写了一个链表,查找效率变成了 O(n)。
654+
655+
树的平衡性
656+
657+
为了能以较快的时间 O(log n)来操作一棵树,我们需要保证树总是平衡的:
658+
659+
- 起码大部分是平衡的,此时的时间复杂度也是接近 O(log n) 的;
660+
- 这就要求树中每个节点左边的子孙节点的个数,应该尽可能地等于右边的子孙节点的个数;
661+
662+
常见的平衡树
663+
664+
- AVL 树:是最早的一种平衡树,它通过在每个节点多存储一个额外的数据来保持树的平衡。由于 AVL 树是平衡树,所以它的时间复杂度也是 O(log n)。但是它的整体效率不如红黑树,开发中比较少用。
665+
- 红黑树:同样通过一些特性来保持树的平衡,时间复杂度也是 O(log n)。进行插入/删除等操作时,性能优于 AVL 树,所以平衡树的应用基本都是红黑树。

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /