数据结构-各种树的简单理解
理解:二叉树的查找的优化,也是利用了类似二分查找的思想,让查找的时间复杂度变成O(log2 n)
1. 树
N叉树浪费链接的存储空间,N越大浪费越严重
解决:N等于2时链接空间浪费率最低,于是有了二叉树
2. 二叉树
优点:链接空间浪费率达到最低。
缺点:无约束的二叉树是无序的,查找的时间复杂度为O(N),
解决:有了二叉搜索树BST(Binary Search Tree)(又称排序二叉树、有序二叉树、二叉查找树)
3. 二叉搜索树BST
优点:排序二叉树查询、删除和插入的平均时间复杂度都是O(log2 n)
缺点:但是随着节点的添加和删除,查询的时间复杂度在O(log2 n) 到O(n)之间,
也就是说极端情况可能成为链表结构,查询时间复杂度变成O(n)
解决:在添加和删除节点时要维持二叉树的平衡 -> 平衡二叉树(AVL树)、红黑树等
场景:实际使用不多
4. 平衡二叉树(AVL树)
优点:AVL树是高度平衡的二叉树,查找效率非常高,接近二分查找。
缺点:每次插入和删除都需要维护平衡,代价高,耗时大。
解决:不维持严格平衡,只保证近似平衡 -> 红黑树
场景:实际使用不多
5. 近似平衡的二叉树-红黑树
优点:性能稳定,插入、删除、查找的复杂度在最好、最坏的情况都是O(log2 n)