详解二叉树的四种遍历方式

二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点
被访问一次且仅被访问一次。

在二叉树的遍历中存在四种较为常用的遍历方式:前序遍历、中序遍历、后序遍历、层序遍历

前序遍历

使用递归方式实现前序遍历的具体过程为:

  1. 访问根节点
  2. 遍历左子树
  3. 遍历右子树
    在这里插入图片描述

中序遍历

使用递归方式实现中序遍历的具体过程为:

  1. 遍历左子树
  2. 访问根节点
  3. 遍历右子树
    在这里插入图片描述

后序遍历

使用递归方式实现后序遍历的具体过程为:

  1. 遍历左子树
  2. 遍历右子树
  3. 访问根节点
    在这里插入图片描述

注意:

  1. 已知 前序遍历序列中序遍历序列可以唯一确定一颗二叉树
  2. 已知 中序遍历序列后序遍历序列可以唯一确定一颗二叉树

而已知 前序和后序 是不能确定一颗二叉树的

层序遍历

使用递归方式实现前序遍历的具体过程为:

  1. 从根节点从上往下逐层遍历
  2. 在同一层,按从左到右的顺序对结点逐个访问

在这里插入图片描述

二叉树的示例:
在这里插入图片描述


二叉树的创建:
  1. 先使用二叉链的结构写一个建立二叉树的函数(函数返回根节点)
  2. 代码以前序遍历方式输入二叉树,当输入“#”时,指针指向NULL,说明是该处为空

图解二叉树的创建
在这里插入图片描述

二叉树的创建代码如下:

#include <stdio.h>
#include <stdlib.h>

typedef char BTDataType;

// 二叉链
typedef struct BinaryTreeNode {
	BTDataType data;			// 当前节点值域
	struct BinTreeNode* lChild;	// 指向当前节点左孩子 
	struct BinTreeNode* rChild;// 指向当前节点右孩子 
}BTNode;

//返回根节点(二叉树的创建)
BTNode *BinaryTreeCreate(BTDataType* src){
	static int s_n = 0;

	if (src[s_n] == '#'){
		s_n++;
		return NULL;
	}

	BTNode * cur = (BTNode *)malloc(sizeof(BTNode));
	cur->data = src[s_n];
	s_n++;

	cur->lChild = BinaryTreeCreate(src);
	cur->rChild = BinaryTreeCreate(src);

	return cur;
}

四种遍历方式的代码详解:

前序遍历

中序遍历

后序遍历

层序遍历

习题

  1. 已知二叉树后序遍历序列是bfegcda,中序遍历序列是badefcg,它的前序遍历序列是:

A. abcdefg
B. abdcefg
C. adbcfeg
D. abecdfg

正确答案 B

答案解析

直接看到a的子节点d,答案就出来了

在这里插入图片描述

  1. 一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足?

A. 所有的结点均无左孩子
B. 所有的结点均无右孩子
C. 只有一个叶子结点
D. 是一棵满二叉树

正确答案:C

答案解析

因为先序遍历结果是“根左右”,后序遍历结果是“左右根”。

  • 当没有左子树时,就是“中右”和“右中”
  • 当没有右子树时,就是“中左”和“左中”

则所有的结点均无左孩子或所有的结点均无右孩子均可,所以A、B不能选,又所有的结点均无左孩子与所有的结点均无右孩子时,均只有一个叶子结点,故选C。

  1. 下列哪一个术语与数据的存储结构无关

A. 顺序表
B. 静态数组
C. 二叉树
D. 链表

正确答案: C

答案解析:

数据结构概念一般包括 3方面的内容:数据之间的逻辑关系即数据的逻辑结构;数据在计算机中的存储方式即数据的存储结构;及在这些数据上定义的运算的集合。

  • 线性表是最简单、最常用的一种数据结构。线性表的逻辑结构是n个数据元素的有限序列(a1,a2,……,an)。由于顺序表采用的是顺序存储方式,用存储单元的邻接性体现线性表元素间的一维顺序关系,因此,对线性表进行插入和删除运算时,可能需要移动大量的结点,以保持这种物理和逻辑的一致性。
  • 在链表的每个结点中包括指针字段,其中rlink指向结点的后继,llink指向结点的前驱,就可以方便地进行向后和向前两个方向的查找了,这样的链表称作双链表。
  • 二叉树 是指数据的逻辑结构,只抽象地反映了数据之间的逻辑关系,而不管其在计算机中的存储方式。

如有不同见解,欢迎留言探讨!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值