目录
一.基础知识 :
1.概念:
在前面学过的存放数据的容器有:数组、链表、栈、队列等,这些都是线性结构,数据元素之间存在一对一的线性关系。但在实际生活中,往往是非线性关系,数据元素之间的关系通常可以一对多。所以必须要把这些数据关系储存下来。其实树形结构就像递归数一样。递归树中,都只能从父节点走到子节点。我们只需要记录每个父节点有哪些子节点,那么就可以遍历整个递归树。我们可以用动态数组(vector)来记录每个节点的子节点。这就是树的孩子表示法


2.定义:
Ⅰ.树的相关基础术语:
(1).根节点:最顶层的节点就是根结点,它是整棵树的源头,一般用root表示。如1
(2)叶子节点:在树最底端的节点,就是其子节点个数为0的节点。如4、7、6、3
(3).节点的度:指定节点有子节点的个数。如2的度为3
(4).无根树:没有指定根节点的树,树的形态多样。明显这里以1为根和以5为根,树的形态不一样。
(5).有根树:指定了根节点的树,树的形态唯一。
(6).森林:由多棵树构成
(7).链长:边权相加。
Ⅱ.树的层次:
(1).节点高度:指从这个节点到叶子节点的距离(一共经历了几个节点)。
(2).树的高度:指所有节点高度的最大值。
(3).节点的层:从根节点开始,假设根节点为第1层,根节点的子节点为第2层,依此类推
3.树的性质:
性质1:n个节点,保证任意两点有且仅有一条路径,树中有且仅有n-1条边。
证明:除第一个节点外,连接一个其他节点,至少增加一条边,所以n个点至少要用n-1条边才能保证所有节点连通。若此时再增加一条非重边,任意两点间是否还存在一条唯一路径。
性质2:树的根结点没有前驱(父节点),除根结点外的所有结点有且只有一个前驱。树中所有结点可以有零个或多个后继(子节点)。
证明:同上。
二.存储思路:
输入一个数字n表示一颗有n个点的树。接下来一行输入n个数,表示每个点上的权值ai。后面n-1行,每行输入三个数u,v,w,表示节点u,v存在一条边,边权为w。请把所有信息保存下来。

最低0.47元/天 解锁文章
2748

被折叠的 条评论
为什么被折叠?



