持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
背景
-
记录树相关的最基础的知识。
-
树的应用非常广泛,既有基础树的应用,也有高级树(AVL树,红黑树)的应用。
-
所有的数据结构都只需要考虑,这样的数据结构提供的操作,它的操作带来复杂度,时间复杂度和空间复杂度。
过程
-
如果是一颗树,需要考虑到哪些信息呢?
-
树的高度、深度
-
祖父节点、父亲节点、兄弟节点、儿子节点、孙子节点。
-
节点、树叶
-
一棵树的深度等于它的最深的树叶的深度,该深度总是等于这棵树的高。
-
树是一个宽泛的概念,它有本身的一些遍历方式:先序遍历、中序遍历、后序遍历。
-
UNIX的目录结构就是树的数据结构。
-
-
树的常用类别?
-
树:是一种数据结构。它允许无数多的儿子,每个儿子分支运行无限深度,且无大小排序限制。
-
二叉树:是一种特殊的树结构。最多只允许两个儿子,但是每个儿子分支允许无限深度,且无大小排序限制。
-
二叉查找树:是一种特殊的二叉树结构。一个节点最多只允许两个儿子,但是儿子节点是顺序排序的。一般是左儿子小于父节点,而父级节点小于右儿子节点。
-
AVL树:带有平衡条件的二叉查找树。每个阶段的左子树和右子树的高度最多差1的二叉查找树。这些设计是建立在数学原理上的。数学原理如果这样设计数据结构,可以保证一定的树深度。通过单旋转和双旋转来保证每个节点的左子树和右子树的高度最多差1的二叉查找树。
-
红黑树:在AVL树添加颜色限制。保证从根节点出发每条路径的黑色节点数目必须一样。
-
想象一下,如果一棵树只有儿子这一层,这是不是又退化成了链表呢?
-
-
二叉树的应用?
-
二叉树:一个节点下,有两个儿子。但是也可能会形成最坏的二叉树,某个分支可能非常长的情况。他的重要应用是查找,因此二叉查找树的适应于很多应用场景。比如在编译器的设计领域。表达式树(做加减乘除)。举例:看见如下表达式树,可以画出树结构吗?(a + (b * c)) + (((d * e) + f) * g)。
-
二叉查找树:深度的平均值O(log N)
-
如何使二叉树变成二叉查找树呢?那就是项的值的大小在树中的排序规则。
-
小结
-
总结学到树的最基础知识。
-
理解树,是怎么变成二叉树?怎么变成二叉查找树?怎么变成AVL树?怎么变成红黑树?
-
理解树结构相互之间的关系和转换过程。