1、本质问题——
树不是线性表,是一种描述非线性层次关系的数据结构。是N个数据结点的集合。
2、基本特征——
- 有且仅有一个结点没有直接前驱,那就是根节点;
- 除了根结点外,其他结点有且仅有一个直接前驱;
- 每个结点可以有任意后继结点;
一个树结构可以为空,没有任何结点;如果仅仅包含一个结点,那也叫一个树。
3、基本概念——
- 兄弟结点——拥有同一个父结点的结点;
- 结点的度——一个结点所包含子树的数量;
- 树的度——该树所有结点中最大的度;
- 叶子结点——树中度为零的结点,也叫终端结点;
- 结点的层数——从根结点开始算,根结点是第一层,依次往下。
- 有序树——树中的各结点的子树(兄弟结点)从左到右按一定次序去排列的树;
- 森林——N棵互不相交的树的集合。
4、二叉树——
- 特点——每个结点最多只有两个子结点,可以没有或者只有一个。
- 分类:
- 满二叉树:除了最下面一层的叶子结点外,其他结点都有两个子结点;
- 完全二叉树:除了最下面一层的叶子结点外,其他各层结点数达到最大个数,而且最后一层叶子结点按照从左到右的顺序连续存在,只缺最后一层若干结点;
5、存储方式
顺序存储就是从根结点开始一层层地按顺序存储在数组里,但是只适用于完全二叉树,因为非完全二叉树的话,要进行补全才可方便进行
6、二叉树的遍历
- 先序:先访问根结点,后是左子树,到右子树;
- 中序:先左子树,后根结点,最后是右子树;
- 后序:先左子树,后右子树,最后根结点。
7、题目训练——
(1)题目—— 二叉树遍历
题目描述:
二叉树的前序、中序、后序遍历的定义:
前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;
中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;
后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。
给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。
输入:
两个字符串,其长度n均小于等于26。
第一行为前序遍历,第二行为中序遍历。
二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。
输出:
输入样例可能有多组,对于每组测试样例,
输出一行,为后序遍历的字符串。
样例输入:
ABC
BAC
FDXEAG
XDEFAG
样例输出:
BCA
XEDGAF
来源:
自己的程序——呜呜,还没调试出来,今天太晚了,明天写好就贴出来。