二叉树的遍历 -- 前序遍历、中序遍历、后序遍历

本文详细介绍了二叉树的前序遍历,通过C++代码展示了遍历过程。在遍历过程中,重点阐述了递归算法的入口与出口,以及如何保护和恢复现场。以一个具体示例解释了遍历操作,包括输出节点值、递归调用以及左右子树的处理。
摘要由CSDN通过智能技术生成

本文部分图片截取自B站懒猫老师。
视频链接为:https://www.bilibili.com/video/BV1qV411f77r?spm_id_from=333.999.0.0.

二叉树的遍历操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先,判断传入的根节点 bt,它的值是否为空。如果为空,就直接返回。这也是递归算法的出口。注意:递归必须要有出口(结束条件)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
C++定义二叉树的方法
在这里插入图片描述
C语言定义二叉树的方法
在这里插入图片描述

二叉树的前序遍历详解

存储结构 – 二叉链表

在这里插入图片描述

遍历操作过程

在这里插入图片描述

遍历操作过程 – 递归算法

在这里插入图片描述
以下图为例,
在这里插入图片描述
以下图为例,
在这里插入图片描述
上图中的语句 visit(bt->data);的作用可以直接理解为输出bt所指向结点的数据域,这里即结点 A 的值。

当程序执行到 PreOrder(bt->lchild); 时,即开始递归调用。

但在进行递归调用之前,首先要进行一项特别重要的事情。-- 保护现场,即要将当前执行的是哪一个语句和此时结点的状态压入到系统栈中。
在这里插入图片描述
当压栈完成,保存了现场之后,重新开始一段代码。
在这里插入图片描述
因此,在判断时,因为为空,所以直接返回。

但在进行递归返回之前,也要进行一项特别重要的事情。-- 恢复现场,即将上一次执行的那个语句和那时的结点的状态从系统栈中出栈。

也就是例子中的回到第五行,再将bt的指向恢复到A结点。
因为从系统栈中出栈了,所以栈中就没数据了。
在这里插入图片描述
紧接着执行第六行的递归调用,采用与上面同样的步骤进行。

在保存现场之后,将A的右子树C传给bt,从而bt指向C。
在这里插入图片描述
然后对bt的指向进行判断,看看是否为空,因为bt指向C,所以bt指向不为空,接着输出C,然后继续执行,也就是要再次递归,但在递归之前还要继续保存现场,保存现场之后,重新开始一段代码。
在这里插入图片描述
后面的步骤与上面大同小异了,再此不再继续分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuechanba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值