树
树是一种非线性结构,可以有效描述有分支和层次特性的数据集合。
树由 n(n≥0)n ( n≥0 )n(n≥0) 个结点组成的有限集合中,除根结点以外的其他结点划分为 m(m≥0)m ( m≥0 )m(m≥0) 个互不相交的有限集 T0,T1,T2⋅⋅⋅T(m−1)T_0, T_1, T_2 ··· T_ (m-1)T0 ,T1 ,T2 ⋅⋅⋅T( m−1);其中, 每个集合本身又是一棵树,我们称它为根结点的子树。
人话:把根结点和其他结点连接的分支砍掉,剩下几部分的就是子树。
我们可以把树看成一张族谱以方便理解。
树结点的度:
-该结点拥有的子树数,相当于族谱中某个人拥有的后代数。
-如果某个树结点的度为000(该成员没有任何后代),那么该结点为叶子结点,否则为分支结点。
-一棵树的度定义为所有结点中的最大值(家族中谁的后代多取谁的值)。
前驱&后继&祖先结点:
-前驱:除根结点外,其余树结点有一个唯一的前驱点,被称作父亲(双亲)。
-后继:每个结点可以有000个或多个后继结点(就像一个人有000或多个后代);拥有同一个前驱(拥有同一个父亲)的多个结点叫做兄弟节点。
-祖先结点:沿根结点到某一结点的路径上的所有结点都是这个结点的祖先结点
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
树的存储方法:
方法1:孩子存储法(vector动态扩容)
存储每个结点的孩子编号
方法2:父亲存储法
存储每个结点i的父亲
如果可以根据存储好的树信息还原出原来的树,那么树被安全 , 有效的存储了
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
有点一坨,致歉