算法与数据结构——二分搜索树


C++实现及理论https://www.cnblogs.com/polly333/category/720001.html

https://github.com/liuyubobobo/Play-with-Algorithms

python实现https://github.com/ShiveryMoon/Imooc-Algorithm-PythonEdition


大神笔记https://segmentfault.com/a/1190000004271781



深度优先遍历:





广度优先遍历:




二叉搜索树的删除

https://segmentfault.com/a/1190000004407072

二分搜索树的floor和ceil



为了避免二叉树O(logn)退化成链表O(n):通过平衡二叉树解决(红黑树、AVL树、2-3树)


二叉树的高度可能是多少呢?这个问题的答案取决于键是怎么被添加到树中的。如果键是以一个随机的顺序加到树中的,那么当节点的数目为n时,树的高度大概是 log2n。 这是因为键是随机地散布的,大约有一半的节点会比根节点大,另一半会比它小。记住在二叉树中,根上有一个节点,下一级有两个,再下一级有四个。当级数为d时,这一级的节点 数目为 2d。当h表示树的高度时,一个满二叉树中节点的总数是 2h+1-1。

一个满二叉树中的节点数目和一个平衡二叉树中的左子树和右子树的数目是一样多的。当树中有n个节点时put执行的最差结果的时间复杂度是 O(log2n)。要注意到这与上一段所说的是逆运算的关系。所以 log2n 代表树的高度,这表示把一个新节点插入到一个合适位置前,在搜索中需要比较的次数。

不巧的是,通过插入排序过后的键,建造一个高度为n的搜索树是可能的。图 就展示了这种树的一个例子,在这种情形下,这时put方法的时间复杂度为 O(n)。



猜你喜欢

转载自blog.csdn.net/u012084802/article/details/80361949