二叉树的前中后遍历以及层序遍历操作(C语言)

Posted bfhonor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的前中后遍历以及层序遍历操作(C语言)相关的知识,希望对你有一定的参考价值。

一、什么是遍历?

  • 遍历:按照某种次序把所有结点都访问一遍。
    在这里插入图片描述

二、 二叉树的遍历

  • 二叉树的递归特性:
    ①、要么是个空二叉树
    ②、要么就是由“根节点+左子树+右子树”组成的二叉树
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

(一)先序遍历(代码)

在这里插入图片描述
在这里插入图片描述

typedef struct BiTNode{
	ElemType data;
	struct BiTNode *lchild,*rchild'
}BiTNode,*BiTree;

//先序遍历
void PreOrder(BiTree T){
	if(T != NULL){
		visit(T);	//访问根结点
		PreOrder(T -> lchild);	//递归遍历左子树
		PreOrder(T -> rchild);	//递归遍历右子树
	}
}

(二)中序遍历(代码)

在这里插入图片描述
在这里插入图片描述

typedef struct BiTNode{
	ElemType data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//中序遍历
void InOrder(BiTree T){
	if(T != NULL){
		InOrder(T -> lchild);	//递归遍历左子树
		visit(T);	//访问根结点
		InOrder(T -> rchild);	//递归遍历右子树
	}
}

(三)后序遍历(代码)

在这里插入图片描述
在这里插入图片描述

typedef  struct BiTNode{
	ElemType data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//后序遍历
void PostOrder(BiTree T){
	if(T != NULL){
		PostOrder(T -> lchild);	//递归遍历左子树
		PostOrder(T -> rchild);	//递归遍历右子树
		visit(T);	//访问根结点
	}
}

求树的深度(应用)

在这里插入图片描述

(四)层序遍历

在这里插入图片描述

  • 算法思想:
    ①、初始化一个辅助队列
    ②、根结点入队
    ③、若队列非空,则队头结点出队,访问该结点,并将其左、右孩子插入队尾(如果有的话)
    ④、重复③直至队列为空
//二叉树的结点(链式存储)
typedef struct BiTNode{
	char data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//链式队列结点
typedef struct LinkNode{
	BiTNode *data;	//存指针而不是结点
	struct LinkNode *next;
}LinkNode;

typedef struct{
	LinkNode *front,*rear;//队友队尾
}LinkQueue;

//层序遍历
void LevelOrder(BiTree T){
	LinkQueue Q;
	InitQueue(Q);	//初始化辅助队列
	BiTree p;
	EnQueue(Q,T);	//将根结点入队
	while(!IsEmpty(Q)){//队列不空则循环
		DeQueue(Q,p);	//队头结点出队
		visit(p);	//访问出队结点
		if(p->lchild != NULL){
			EnQueue(Q,p->lchild);	//左孩子入队
		}
		if(p->rchild != NULL){
			EnQueue(Q,p->rchild);	//右孩子入队
		}
	}
}

以上是关于二叉树的前中后遍历以及层序遍历操作(C语言)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode JS实现 二叉树(前中后层序)遍历(递归迭代法)

LeetCode JS实现 二叉树(前中后层序)遍历(递归迭代法)

二叉树链式存储的前中后递归和非递归遍历层序遍历实现

二叉树链式存储的前中后递归和非递归遍历层序遍历实现

二叉树的前中后和层序遍历详细图解(递归和非递归写法)

二叉树的前中后序递归和非递归遍历操作代码