第四章 树与二叉树
4.1 树的基本概念
1. 树的定义和基本术语
- 除根节点外,任何一个结点都有且仅有一个前驱
1)树的基本概念
2)结点、树的属性描述
3)有序数和无序数
有序数:逻辑上看,树中结点的各子树从左至右是有次序的,不能互换
无序树:逻辑上看,树中结点的各子树从左至右是无次序的,可以互换
4)树和森林
2.树的性质
1)常见考点
考点1:结点数=总度数(总分支) + 1
考点2:度为m的树、m叉树的区别;
考点3:
考点4:
考点5:
考点6:
4.2 二叉树的概念
1. 二叉树的定义和基本术语
1)二叉树的基本概念
二叉树是递归定义的数据结构
2)二叉树的五种状态
3)特殊的二叉树
完全二叉树:如果某个结点有一个孩子,那么一定是左孩子。
2. 二叉树常考性质
1)二叉树常见考点
考点1
考点2
考点3
2)完全二叉树常见考点
考点1
考点2
3) 二叉树的存储结构
1-> 二叉树的顺序存储
基本操作
判断非完全二叉树左右孩子是否为空
- 无法使用完全二叉树的方法进行判断
- 如果isEmpty == ture则为空
最坏的情况:高度为h且只有h个结点的单支树(所有结点只有右孩子),也至少需要2的h次方再减一个存储单元
结论:二叉树的顺序存储结构,只适合存储完全二叉树。
2-> 二叉树的链式存储
代码实现
这样的方法找到指定结点p的左右孩子——只能从根开始遍历寻找
3. 二叉树的遍历和线索二叉树
1)二叉树的先中后序遍历
遍历:按照某种次序把所有结点都访问一遍。
层次遍历:基于树的层次特性确定的次序规则。
先/中/后序遍历:基于树的递归特性确定的次序规则。
2)二叉树的递归特性
练习
3)先序遍历(代码)
//中序遍历
void Pre0rder(BiTres T){
if(T!=NULL){
Pre0rder(T->lchild);
visit(T);
Pre0rder(T->rchild);
}
}
//后序遍历
void Pre0rder(BiTres T){
if(T!=NULL){
Pre0rder(T->lchild);
Pre0rder(T->rchild);
visit(T);
}
}
空间复杂度:O(h)
eg:
4. 二叉树的层次遍历
1)算法思想
2)代码实现
### 3. 由遍历序列构造二叉树