前置知识:二叉树的概念与性质
为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!
学习目标
-
熟练掌握二叉树的存储方式
-
理解二叉树的三种遍历方式的实现过程
-
给出一棵二叉树,能够写出对应的三种遍历序列,给出任意两种遍历序列,能够推导并还原出二叉树并写出另外一种遍历序列
-
掌握三种遍历方式的代码实现,掌握给出两种遍历方式的序列,求第三种遍历序列的代码实现
二叉树的存储
二叉树的存储和普通树基本一致。只是由于二叉树中的结点最多只有两个子节点,所以在存储子节点时有区别。
数组存储
Type val[N]; // 存当前结点的信息
int fa[N]; // 存父结点信息
int left[N], right[N]; // left[i],right[i]: 结点 i 的左孩子和右孩子编号
Copy
结构体存储
struct node{
Type val;
int fa;
int left, right;
} tree[N];
Copy
顺序存储
注意:顺序存储最适用于存储完全二叉树!
顺序存储采用数组下标去保存二叉树的结构,采用完全二叉树的编号方式存储二叉树。
根据二叉树的性质 5,可以快速定位结点 ii 的父结点( \lfloor i/2 \rfloor⌊i/2⌋),左孩子(2x2x),右孩子为(2x+12x+1)。
优点:存储方便,查找父结点、子节点方便