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

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

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

前序遍历

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

  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;
}

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

前序遍历
中序遍历
后序遍历
层序遍历

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

发布了92 篇原创文章 · 获赞 32 · 访问量 4652

猜你喜欢

转载自blog.csdn.net/AngelDg/article/details/103264663
今日推荐