二叉树遍历操作详解

news2024/11/15 22:25:01

目录

一、思路详解

1.1 递归思路

1.2 递归分支图

1.3 递归栈帧图

二、C语言实现

2.1 前序遍历

2.2 中序遍历

2.3 后序遍历

三、查找值为x的结点

3.1 递归思路

3.2 C语言代码


一、思路详解

采用递归的思想解决问题,以高度为3的满二叉树为例。

1.1 递归思路

考虑特殊情况:

  1. 如果是空节点,返回NULL
  2. 如果不空返回该节点的值域

考虑一般情况:

  1. 每个节点都可被看作根节点,去重复递归左右子树

1.2 递归分支图

1.3 递归栈帧图

二、C语言实现

2.1 前序遍历

void PrevOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("N ");
		return;
	}
	printf("%d ", root->data);
	PrevOrder(root->left);
	PrevOrder(root->right);
}

2.2 中序遍历

void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("N ");
		return;
	}
	InOrder(root->left);
	printf("%d ", root->data);
	InOrder(root->right);
}

2.3 后序遍历

void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("N ");
		return;
	}
	InOrder(root->left);
	printf("%d ", root->data);
	InOrder(root->right);
}

三、查找值为x的结点

3.1 递归思路

考虑特殊情况:

  1. 如果是空节点,返回NULL
  2. 如果是要找的结点,返回该节点

考虑一般情况:

  1. 每个节点都可被看作根节点,去重复递归左右子树

注意:由于函数只有一个返回值,所以在左子树如果遍历到右子树就无需再次遍历。

3.2 C语言代码

BTNode* TreeFind(BTNode* root, int x)
{
	if (root == NULL)
	{
		return NULL;
	}
	if (root->data == x)
	{
		return root;
	}
	BTNode* ret1 = TreeFind(root->left, x);
	if (ret1)
	{
		return ret1;
	}
	BTNode* ret2 = TreeFind(root->right, x);
	if (ret2)
	{
		return ret2;
	}
	return NULL;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1684814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode更改语言,记录一下

首先打开安装好的Vscode软件,可以看到页面上显示的是英文效果。 同时按键ctrlshiftp,接着在输入框中输入 configure Display language如图: 选择中文简体就ok了,如果没有则安装 chinese Language pack

Qt QString详细用法

一.基础用法 1.创建QString对象 QString str1 "Hello, World!"; QString str2("This is a QString object."); //一个是等号的重载,一个是拷贝构造,本质上是等价的 2.获取字符串长度 int length str1.length(); // 返回字符串…

UBUNTU22.04无法安装nvidia-driver-550 依赖于 nvidia-dkms-550 (<= 550.54.15-1)

类似的报错信息,就是卡在了nvidia-dkms-550无法安装 Loading new nvidia-550.40.07 DKMS files… Building for 6.5.0-15-generic Building for architecture x86_64 Building initial module for 6.5.0-15-generic ERROR: Cannot create report: [Errno 17] File e…

项目启动失败,【consul】

如题,启动时项目未能正常启动,但上次都一切正常,日志提示: Consul service ids must not be empty, must start with a letter 经过排查是因为consul的consulconfigservice服务假死,导致无法正常获取到配置文件&am…

【全开源】JAVA人力资源招聘社会校招类型招聘系统校园招聘PC端

塑造企业高效招聘新体验 一、源码简介 招聘PC端源码,一款面向企业的招聘管理系统解决方案。它拥有完整的招聘流程管理功能,从职位发布到候选人管理,再到面试安排与结果反馈,所有环节都通过直观易用的界面进行展现,大…

tinyrenderer-移动镜头

同一个点的坐标在不同基坐标系中转换 设 (O, i,j,k)坐标系中点P坐标为 假设基坐标(i,j,k)与(i’,j’,k’)的转换关系为 如图,可以看出 其中(x’,y’,z’)为点P在基坐标(i’,j’,k’)下的坐标,(Ox’,Oy’,Oz’)为(i’,j’,k’)坐标系原点O’在(i,j,k…

【关键字】——register在C语言中的使用

register——寄存器 了解register之前,应该先认识认识寄存器,何为寄存器? 在计算机中,数据可以存储在远程二级存储(网盘,服务器),本地二级存储(本地磁盘)&am…

DOS学习-目录与文件应用操作经典案例-move

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 move命令不仅能够对文件或目录进行重命名,还可以将文件转移到用户指定的位置。 二.使用 命令格式1(重命名):move …

VR直播:改变我们的直播方式,让现场触手可及

VR直播是近期比较火爆的一种直播方式,相信在抖音上我们都刷到过转动手机、变换视角的VR直播,因为形式比较新颖,用户的参与度比较高,一场直播下来用户的打赏也是较为可观的。 不仅仅在直播行业,在众多应用领域中&#…

ARTS Week 29

Algorithm 本周的算法题为 2413. 最小偶倍数 给你一个正整数 n ,返回 2 和 n 的最小公倍数(正整数)。 示例 1:输入:n 5输出:10解释:5 和 2 的最小公倍数是 10 。 实现代码如下: con…

压摆率SR、增益带宽积GBP、开环增益Aol

运放的选型对运放电路的实际效果非常关键,一定要理解运放重要参数的概念。下面几天将对运放的选型进行系统学习并做实验 运放的压摆率(Slew Rate,简称SR)是指闭环放大器在输入为阶跃信号时,输出电压时间变化率的平均值…

BEVFusion的相机工作流中,图像编码之后FPN+ADP网络的作用

在BEVFusion的相机工作流中,图像编码之后会经过一个FPNADP的网络,那么这个结构的作用是什么呢 FPN大家都很熟悉,就是特征金字塔。但是这里还是贴一些来自GPT的废话 在Bird’s Eye View (BEV) 算法中使用的特征金字塔网络(FPN, Feature Pyrami…

鸿蒙OS开发:【一次开发,多端部署】(分栏控件)

一多分栏控件 介绍 本示例分别展示了多场景下,一多分栏控件的响应式变化效果。 本示例分别用到了[SideBarContainer]组件与[Navigation]组件,对应使用场景如下: ABC:即SideBarContainer组件组合Navigation组件AC:S…

SSRF攻击技术

1、SSRF形成原因 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系…

03-01-Vue组件的定义和注册

前言 我们接着上一篇文章02-Vue实例的生命周期函数 来讲。 下一篇文章 03-02-Vue组件之间的传值 什么是组件 组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们…

Windows安装php_ssh2扩展

一、读取PHP信息 先用phpinfo读取使用的php的版本信息 二、下载ssh2扩展 链接:https://windows.php.net/downloads/pecl/snaps/ssh2/1.2-dev/ 点击链接下载对应链接 三、开启扩展 下载好压缩包后,解压缩得到php_ssh2.dll、php_ssh2.pdb文件&#xff…

以太坊(2)——共识机制与挖矿算法

共识机制 ETH采用的是基于GHOST协议的共识机制 "GHOST"(Greedy Heaviest-Observed Sub-Tree)共识机制,它是以太坊使用的一种改进的区块链共识算法。GHOST共识机制旨在提高链的安全性和效率,通过考虑非主链区块的贡献&…

如何保护Kubernetes集群

2018年黑客入侵了特斯拉在亚马逊上的Kubernetes容器集群。由于该集群控制台未设置密码保护,黑客便得以在一个Kubernetes pod中获取到访问凭证,然后据此访问其网络存储桶S3,通过S3获取到了一些敏感数据,比如遥测技术,并…

llama-factory学习个人记录

框架、模型、数据集准备 1.llama-factory部署 # 克隆仓库 git clone https://github.com/hiyouga/LLaMA-Factory.git # 创建虚拟环境 conda create --name llama_factory python3.10 # 激活虚拟环境 conda activate llama_factory # 安装依赖 cd LLaMA-Factory pip install -…

Vue——开发前的准备和创建一个vue的工程

文章目录 前言安装 Node js1、下载node.js2、安装node.js3、查看是否安装成功 创建 vue 工程Visual Studio Code 配置目录结构 前言 本篇博客主要讲解Vue开发前的环境配置与一些说明。 安装 Node js 环境需要安装配置一个nodejs 的环境。 vue3 最低nodejs 版本要求为 15.0 1…