在数学中,树(Tree)是一类特殊的图(Graph),是一种连通图,但是无环,两个顶点之间存在唯一路径。如果不指定某个特定的“根”节点,则称为无根树,即任意节点都可以是“潜在的根”。
所有的树都是无环图/无圈图,但无圈图允许不连通(相当于多个树的集合)。
是除了根之外所有点入度均为1的有向树。
根:唯一没有入度的节点;
子树、前驱
有向有序树:
有向:边是有方向的,表示节点之间的关系是有方向的。
有序:同一个父节点下,子节点是按照某种顺序排列的。
度为二的有向有序树 != 二叉树。前者只是有形式上的排序,去掉第一子树后,后续子树可以向前补位;而后者明确了左子树和右子树的概念。
度数:指出度,即子树个数
森林:0或多棵树的集合。
树形表示法:即树状图
形式语言表示法:即描述树的逻辑结构(节点集合+边集合)
文式图表示法:即Venn图,用集合的包含/被包含关系来表示树的父-子节点关系;
嵌套括号表示法:父节点后每个括号表示一个子节点,例如:(A(B)(C)(D(E)(F)))(叽里咕噜说什么呢)
凹入表表示法:常见于网页、文件存储结构
杜威表示法:图书目录
树/森林与二叉树存在一一对应关系:
树 -> 二叉树:
对于每一棵树,将所有兄弟节点左右相连,再对每一个节点抹去除最左孩子以外的线,整理得到单棵树的二叉树;
对于多棵树,后续的每棵树的转化为二叉树后的根节点变为前一棵树根节点的右子树即可。
二叉树 -> 树:
way1:反向操作,断开所有父-右子树关系,各自还原为一棵树;
way2:对于一个左节点,将其右节点、右右节点……全部连接到其父节点,,再断开原二叉树中所有父结点与右孩子结点之间的连线,整理
本质上是图的邻接表。
优势:查孩子个数、结点值、归并与删除;
劣势:找兄弟结点
每个节点包含值和所有子节点指针
每个节点包含:值、第一个子节点(指针)、下一个兄弟节点(指针)、(可能有的)父节点指针
每个节点保留指向父节点的指针
指路:Lecture01
并查集本质上是一种等价类的处理,是由一组不相交的子集组成的集合
等价关系:自反、对称、传递