网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

学习递归层序遍历,轻松掌握二叉树遍历技巧?

GG网络技术分享 2025-11-24 17:39 6


啥是层序遍历这个?

哦, 层序遍历,听起来优良麻烦的样子,其实就是把二叉树的每一层dou像排队一样,一个接一个地走过。

递归是啥?

递归啊,就像是数学里的循环,自己调用自己,直到完成某个任务。在二叉树里递归就是一层层地访问,直到访问完全部的节点。

层序遍历的递归方法

先说说 我们要定义一个函数,比如说叫 print_by_level_1,然后在这玩意儿函数里我们要先判断二叉树是不是空的,Ru果空了就打印“二叉树为空!”。

else printf;

然后 我们要判断当前层是不是再说说一个层,Ru果不是就接着来递归调用 print_by_level_1 函数,参数是当前层的左孩子和右孩子。

if )

vec.push_back;

}

{

层序遍历广泛应用于树的琢磨、 Zui短暂路径寻找、二叉树的构建等场景.二叉树的前序、中序、后序遍历需要用到栈,层次遍历需要借助队列这玩意儿数据结构.

if {

cur++;

case :printf;fflush;

return print_at_level;

void print_tree {

{p=bt-lch;bt-lch=bt-rch;bt-rch=p;

print

#includestdlib.h

{ // 操作后来啊:构造空二叉树T

while {

if

case :if

DestroyBiTree; // 递归销毁右子树,如无右子树,则不施行随便哪个操作

typedef struct tree_node_s {

p=malloc);

}tree_node_t, *Tree;

t-lch=creat_bt2;

{printf;

Ru果我们成功的打印了给定的层次那么就返回非0的正值,Ru果输了返回0。有了这玩意儿思路, 我们就Neng应用一个循环,来打印这颗树的全部层的节点,但是有个问题就是我们不晓得这棵二叉树的深厚度,怎么来控制循环使其收尾呢,仔细kan一下print_at_level,Ru果指定的Tree是空的,那么就直接返回0,当返回0的时候,我们就收尾循环,说明没有节点Neng打印了。

void print_by_level_2 {

v-rch=p;

bitnode *t;

void InOrderTraverse)

中序遍历:若树为空, 则空操作返回,否则从根结点开头,中序遍历根结点的左子树,然后访问根节点,再说说中序遍历右子树。

vals =list

count++;

exit;

if%m)

v=p;

T-data=number; // 将值赋给T所指结点

void exchange

int front=,rear=;

void paintleaf;

preorder;

cout T-data ;

{ PostOrderTraverse; // 先后序遍历左子树

return ;

end = vec.size;

t=creat_bt2;break;

{ // 初始条件:二叉树T存在Visit是对结点操作的应用函数。修改算法6.

q_first.swap;

cout endl;

char ch;int k;

void DestroyBiTree

上一篇文章中我记录了二叉树的先序、 中序、后序的递归和非递归遍历方法,这一篇会接着上一篇文章,记录二叉树的层序遍历方法,层序遍历用到了队列的数据结构,下面直接上代码:.#二叉树#C语言#层序遍历AI Agent手艺社区文章Yi被社区收录加入社区数据结构专栏收录该内容14 篇文章。今天在网上kan到一种递归输出层序后来啊的方法, 记录如下直接上全部代码:

vectortree_node_t* vec;

prtbtree;

{j=i/;

q_second.push_back;

case :exit;

文件 main.cpp 代码如下:

tree_node_t *temp = q_first.front;

} else {

//算法3.:中序遍历的非递归算法void NRInOrder{ BiTree S,p=bt;//定义栈 int top=-; if return;//空二叉树,遍历收尾 while){ while{ if S=p;//当前指针p入栈 else{printf;return;} p=p-lchild;//指针指向p的左孩子结点 } if return //栈空,收尾 else{ p=S;//弹出栈顶元素 visit;//访问结点的数据域 p=p-rchild;//指向p的右孩子结点 } }}

给定一棵二叉树,要求进行分层遍历,每层的节点值单独打印一行,下图给出事例结构:

break;

之后巨大家就Neng自己画图了下面给出程序代码:

int end = ;

do{

max=? hl:hr;

总的以上三种遍历顺序dou属于递归遍历,层序遍历和他们dou不同,涉及到队列的知识,若用层序遍历的顺序对二叉树进行遍历,那么对于上图的二叉树,输出顺序为:1 2 3 4 5 6 7.1、材料项目源码均Yi机领域相关的毕业设计课题、课程作业等用...

while;

BiTree T;

int main {

levorder;

forprintf;

scanf; // 输入结点的值

scanf;

Root =None

CreateBiTree; // 递归构造左子树

*T = malloc);

postorder;

//算法3.:根据先序与中序遍历后来啊建立二叉树void PreInOrd//先序序列从i到j,中序序列从k到h,建立一个二叉树放到t中{ int m; =new BTNode; -data=preord;//二叉树的根 m=k; while m++;//在中序序列中定位树根 /********递归调用建立左子树******/ if-left=NULL; else PreInOrd-left); /********递归调用建立左子树******/ if-right=NULL; else PreInOrd)-right;}

二叉树的遍历附上注释.课程考试材料说说 本材料是为应对各类课程考试而精心准备的综合性学包。这些个材料旨在帮学生系统复习课程内容,搞懂考试要点,搞优良解题技巧,从而在考试中取得优异成绩。

{ // 初始条件:二叉树T存在。操作后来啊:销毁二叉树T

view plaincopy

enqueue;

int print_at_level {

q_first.push_back;

//算法3.:在二叉排序树中删除结点int DeleteNode{ BiTreeNode *pp=new BiTreeNode,*ff=new BiTreeNode; BiTreeNode **p=pp,*s,*q,**f=ff; *p=OxO;*f=OxO; int flag=; if!=){ flag=;//查找成功, 置删除标记,待删除结点为p if-rchild)){//结点无右儿子,结点只有一个分支或为叶子结点 if-lchild==*p) -lchild=-lchild; else -rchild=-lchild; } else{//结点有右儿子 if-lchild)){//结点无左儿子,一个分支 if-lchild==*p) -lchild=-rchild; else -rchild=-rchild; } else {//结点有左二子,两个分支 q=*p; s=-lchild; while{q=s;s=s-rchild;}//在结点p的左分支上沿右指针域往下找,直到右指针域为空时为止 -data=s-data; if{-rchild=s-lchild;} else-lcild=s-lchild; } } } return flag;}

//算法3.:统计二叉树的叶子结点算法int BitreeLeaf if return ; if return ; return +BirLeaf);}

int treedepth;

typedef char etype;

printf:");

void InitBiTree

inorder;

InOrderTraverse; // 再说说中序遍历右子树

//算法3.:二叉树的查找算法BiTree SearchBST{ if return bt; if return SearchBST; else return SearchBST;}

几个有限元素的集合,该集合为空或者由一个根的元素及两不相交的的二叉树组成,是有序树,当集合为空时称为空二叉树,在二叉树中,一个元素也称为一个结点。

对此二叉树遍历的后来啊得是:

void create_tree {

{ Visit; // 先访问根结点

inorderSearch = inOrderTraverse2

void postorder;

层序遍历二叉树

using namespace std;

#includeiostream

#includemath.h // 数学函数头文件,包括floor,ceil,abs等

if // T不空

bitree delqueue;

//二叉链表的存储typedef struct BiTNode { Datatype data; struct BiTNode *lchild,*rchild; //左右孩子指针}BiTreeNode,*BiTree;

void inorder

ift=p;

{rear=%m;

标签:

提交需求或反馈

Demand feedback