文章目录
1.基本概念
结点,根节点,分支结点,叶子结点,边,子树
空树:节点数为0的树
非空树的特性
- 有且仅有一个根节点
- 没有后继的结点称为叶子结点
- 有后继的结点称为分支结点
- 除了根节点外,任何一个结点都有且仅有一一个前驱
树是一种递归定义的数据结构
2.基本术语
1.结点之间的关系描述
- 祖先结点/子孙结点
- 双亲结点(父节点) /孩子结点
- 兄弟结点/堂兄弟结点
- 两个节点之间的路径:只能从上往下
- 路径长度:路径上经过几条边
- 树的路径长度:从树根到每个结点的路径长度的总和
2.结点,树的属性描述
- 结点的层次(深度) :从上往下数
- 结点的高度:从下往上数
- 树的高度(深度) :总共多少层
- 结点的度:有几个孩子(分支)
非叶子节点的度>0
叶子结点的度=0 - 树的度: 树中各结点的度的最大值
3.有序树,无序树
- 有序树:逻辑上看,树中节点的各子树从左至右是有次序的,不能互换
- 无序树:逻辑上看,树中节点的各子树从左至右是无次序的,可以互换
4.森林
森林是m (m20)棵互不相交的树的集合
3.树的性质
考点1
结点数=总度数+1
考点2
-
度为m的树
任意结点的度≤m (最多m个孩子)
至少有一个结点度=m
一定是非空树
-
m叉树
任意结点的度≤m (最多m个孩子)
允许所有结点的度都<m
可以是空树
考点3
考点4
4.树的存储结构
双亲表示法
- 每个结点中保存指向双亲的"指针"
- 根节点存储在0, -1表示没有双亲
- 新增数据元素无需按逻辑上的次序存储
- 优点:查指定结点的双亲很方便
- 缺点:查指定结点的孩子只能从头遍历
孩子表示法
- 顺序+链式存储------指针指向第一个孩子
- 优点:找孩子方便
- 缺点:找父节点不方便
孩子兄弟表示法
- 用二叉链表存储树------左孩子右兄弟
- 孩子兄弟表示法存储的树,从存储视角来看形态上和=叉树类似
- 考点:树与二叉树的相互转换。本质就是用孩子兄弟表示法存储树
重要考点:树、森林与二叉树的转换
- 本质:用二叉链表存储森林------左孩子右兄弟
- 森林中各个树的根节点之间视为兄弟关系
5.树和森林的遍历
树的遍历
先根遍历 ------深度优先遍历
先根,后子树
树的先根遍历序列与这棵树相应二叉树的先序序列相同
后根遍历 ------深度优先遍历
先子树,后根
树的后根遍历序列与这棵树相应二叉树的中序序列相同
层序遍历(用队列实现)------广度优先遍历
森林的遍历
先序遍历
- 若森林为非空,则按如下规则进行遍历:
- 访问森林中第一棵树的根结点。
- 先序遍历第一棵树中根结点的子树森林。
- 先序遍历除去第一棵树之后剩余的树构成的森林。
- 效果等同于依次对各个树进行
先
根遍历
中序遍历
- 若森林为非空,则按如下规则进行遍历:
- 中序遍历森林中第一棵树的根结点的子树森林。
- 访问第一-棵树的根结点。
- 中序遍历除去第一-棵树之 后剩余的树构成的森林。
- 效果等同于依次对各个树进行
后
根遍历
树 | 森林 | 二叉树 |
---|---|---|
先根遍历 | 先序遍历 | 先序遍历 |
后根遍历 | 中序遍历 | 中序遍历 |