数据结构: 树 (查找树)

很重要。

1. 很多逻辑结构就是树,比如文件目录

2. 树具有递归性,许多算法都是递归完成的。(递归到左/右子树,并以抵达叶子节点为递归终止条件)

3. “查找树”的应用:

   不是:因为数据本身的逻辑结构是这样! 

   而仅仅:是一种组织数据、便于高效查找/增加/删除(O(lgn)复杂度)的方式。

 根据具体的情况 (如:查找的次数远大于增删的次数 ; 数据量很大,需要多次从磁盘读取数据到内存),去选用合适的查找树。

扫描二维码关注公众号,回复: 5243276 查看本文章

二叉查找树(Binary Search Tree):

  主要是用树结构来保存排序好的数据,使得查找/增加/删除 (定位到一个数据)时自然符合“二分查找”, 其时间复杂度为 O(lgn)

● 一般的二叉查找树(BST)

  弊端: 左右子树不平衡,可能一些深度比较深,而查找的效率正比于树的深度

平衡的二叉查找树:  维基百科:平衡树

 ● AVL 树:

  实现:在每次插入/删除节点后进行banlance()调整,保持任一节点的左右子树的深度差不超过1

   ● 伸展树(Splay Tree):

        使得经常查找的结点深度较小,从而降低均摊复杂度。

        在均摊O(log n)的时间内完成基于伸展(Splay)操作的插入、查找、修改和删除操作  (注意:即使是查找,也会引起树结构的调整

   ● 红黑树 (Red Black Tree)

   


二叉的限制太强,数据量很大时树的深度势必仍然过高。 所以引入B树,由于可以组织的数据量变大、可以减少IO读取。

  

猜你喜欢

转载自www.cnblogs.com/nanlan2017/p/10406762.html