二叉树,本质上,是对链表和数组的一个折中。。
比如,我有一个任务,需要输入
10万个数据(32位整数),然后有两个操作:
1.添加(删除)一个整数。
2.询问第x大的数据。
比如,我给你 1, 8, 13, 10(等等一堆数据).......
然后我询问第3大的数据,
然后我插入 18
然后我询问第4大的数据
我再插入 9
我再询问第2大的数据
不停的重复1,2
重复10万次。。
应该如何实现。
你会发现,用有序链表,不行,查找(包括1需要找到对应位置,以及2查找)成本大O(N),但具体这个插入操作成本小O(1)。
用有序数组,查找(2的查找)成本小O(1)。但1的插入操作成本很大O(N)。
所以,我们折中使用排序二叉树(二叉树仅仅作为排序二叉树的基础),查找(包括1需要找到对应位置,以及2查找)成本挺小O(logN)。具体这个插入操作成本也挺小O(logN)。
具体的应用就是由排序二叉树(由于普通排序二叉树可能会有不平衡的情况)引申出来的红黑树(linux中ext3文件系统管理),avl树“windows对进程地址空间的管理”。
链接:https://www.zhihu.com/question/37381035/answer/84584381
来源:知乎