课程笔记:二叉树的顺序存储结构和遍历算法

原文链接: https://www.icourse163.org/learn/XIYOU-1002578005?tid=1002984001#/learn/content

一、二叉树的顺序存储结构

在存储二叉树之前要先给二叉树节点排号,排号方法是:根节点为1,左孩子节点为2i+1,右孩子节点为2i+1.创建存储空间的时候,空节点也是需要标注出来的,所以创建的存储空间大小为排号最大的节点数

编号规则:

课程笔记:二叉树的顺序存储结构和遍历算法_第1张图片

顺序存储结构: 

课程笔记:二叉树的顺序存储结构和遍历算法_第2张图片

对于完全二叉树或者满二叉树(满二叉树一定是完全二叉树),不存在空孩子 刚好存满

课程笔记:二叉树的顺序存储结构和遍历算法_第3张图片

对于一般二叉树: 

课程笔记:二叉树的顺序存储结构和遍历算法_第4张图片

对于单支二叉树:

课程笔记:二叉树的顺序存储结构和遍历算法_第5张图片

结论:对于完全二叉树一般采用顺序存储结构,对于非完全二叉树存储密度低,造成内存的浪费一般采取链式存储方式

二、二叉树的遍历

遍历:每个节点都被访问且只被访问一次

D表示根节点,L表示左子树,R表示右子树

 课程笔记:二叉树的顺序存储结构和遍历算法_第6张图片

遍历方法有三种:先序中序和后序

课程笔记:二叉树的顺序存储结构和遍历算法_第7张图片

1、先序遍历算法:

文字描述:先序遍历算法先遍历根节点,然后遍历左子树,最后遍历右子树

先遍历根节点A,然后遍历根节点A的左子树"1","1"子树的根节点为B,”1“的左子树为“2”,”1“的右子树为空,“2”子树的根节点为D,“2”子树的左子树为空,”2“的右子树为叶子节点G。这样A根节点和A的左子树遍历完了,再看A的右子树为”4“,”4“的左子树为叶子节点E,”4“的右子树为叶子节点F。所以最后的顺序就是:A  B  D  G  C  E  F,这样按照先序遍历算法就将整棵树遍历完了。

课程笔记:二叉树的顺序存储结构和遍历算法_第8张图片

代码实现:

若非空,先访问root的数据,然后访问root的左子树,然后访问root的右子树,其中visit函数可以是自己设定的访问方法,可以打印出root的数据也可以添加到数组中

 课程笔记:二叉树的顺序存储结构和遍历算法_第9张图片

 2、中序遍历算法

文字描述如下:中序遍历算法先遍历左子树,然后遍历根节点,最后遍历右子树。

先遍历根节点的左子树”1“,对于”1“子树同样先遍历其根节点的左子树”2“,对于”2“子树其左子树为空,然后访问”2“子树的根节点D,然后访问”2“子树的右子树G,那么对”2“子树就遍历完了,然后遍历”2“子树的根节点B,B的右子树为空,然后遍历”1“子树的根节点A,这样根节点的左子树和根节点都遍历完了。现在开始遍历A的右子树”4“,”4“的左子树为E根节点为C右子树为F,所以总的遍历顺序为 D G B A E C F.

课程笔记:二叉树的顺序存储结构和遍历算法_第10张图片

课程笔记:二叉树的顺序存储结构和遍历算法_第11张图片

3、后序遍历算法 

文字描述:后序遍历先遍历左子树,然后遍历右子树,最后遍历根节点。

先遍历左子树”1“,”1“子树同样先遍历左子树”2“,”2“的左子树为空,右子树为叶子节点G,然后遍历”2“子树的根节点D,然后遍历”1“子树的右子树为空,最后遍历“1”子树的根节点B。这样A的左子树就遍历完了,接下来遍历A的右子树"4",“4”的左子树为叶子节点E“4”子树的右子树为叶子节点F,然后遍历“4”子树的根节点C,最后遍历整棵树的根节点A,所以总的遍历过程为 G D B E F C A

课程笔记:二叉树的顺序存储结构和遍历算法_第12张图片

课程笔记:二叉树的顺序存储结构和遍历算法_第13张图片

练习: 

课程笔记:二叉树的顺序存储结构和遍历算法_第14张图片

参考连接:https://www.icourse163.org/learn/XIYOU-1002578005?tid=1002984001#/learn/content

相关考题主要是给出先序遍历和中序遍历或者给出中中序遍历和后续遍历让你求另外一个遍历结果,方法就是找到头结点即可,不断拆分左右子树,再循环找头结点,可以参考:https://blog.csdn.net/qq_40172610/article/details/82720678

你可能感兴趣的:(数据结构基础)