二叉树的先序遍历详解(小白也懂)(附带中序,后序代码)

文章目录

  • 二叉树的先序遍历(分而治之思想)
    • 样例图
    • 函数的递归调用
    • 源代码
    • 运行结果

二叉树的先序遍历(分而治之思想)

代码在文章底部。

先序遍历又叫先根遍历,顾名思义:遍历顺序为根,左子树,右子树

样例图

本文将对以下二叉树进行遍历

在这里插入图片描述
先上代码:先序遍历的核心代码。

void PreOrder(BiTNode* T)
{
	if (T == NULL)
	{
		cout << "NULL ";
		return;
	}
	cout << T->data << " ";
	PreOrder(T->lchild);
	PreOrder(T->rchild);
}

先序遍历的运行结果:
A B D E C
在这里插入图片描述

函数的递归调用

在这里插入图片描述

解释:第一步:从A结点开始打印,打印A结点,进入A的左子树。

第二步:打印B结点,进入B的左子树。

第三步:打印D结点,进入D的左子树。

第四步:D的左子树为空, 打印 NULL , 返回上一步,打印D的右子树。

第五步:进入D的右子树。

第六步: D的右子树为空,打印 NULL , 返回上一步。

第七步:此处的代码运行结束,返回上一步。

第八步:进入B的右子树,打印E

第九步:进入E的左子树。

第十步:打印E的左子树,打印NULL,返回上一步,打印E的右子树。

第十一步:进入E的右子树。

第十二步:打印E的右子树,打印NULL,返回上一步,此处的函数运行结束。

第十三步:此处的函数运行结束,返回上一步。

第十四步:此处的函数运行结束,返回上一步。

第十五步:进入A的右子树,打印C

第十六步:进入C的左子树。

第十七步:C的左子树为空, 打印 NULL , 返回上一步,打印C的右子树。

第十八步:进入C的右子树。

第十九步:C的右子树为空, 打印 NULL , 返回上一步。

第二十步:此处函数运行结束,继续返回上一步。

到此程序的运行就结束了。

源代码

#include<iostream>
using namespace std;
typedef char ElemType;

typedef struct BiTNode {
	ElemType data;           //数据域
	struct BiTNode* lchild;  //左孩子指针
	struct BiTNode* rchild;	 //右孩子指针
}BiTNode;

//先序排序
void PreOrder(BiTNode* T)
{
	if (T == NULL)
	{
		cout << "NULL ";
		return;
	}
	cout << T->data << " ";
	PreOrder(T->lchild);
	PreOrder(T->rchild);
}

//中序排序
void InOrder(BiTNode* T)
{
	if (T == NULL)
	{
		cout << "NULL ";
		return;
	}
	PreOrder(T->lchild);
	cout << T->data << " ";
	PreOrder(T->rchild);
}
//后序排序
void PostOrder(BiTNode* T)
{
	if (T == NULL)
	{
		cout << "NULL ";
		return;
	}
	PreOrder(T->lchild);
	PreOrder(T->rchild);
	cout << T->data << " ";
}
int main()
{
	//快速创建一个树
	BiTNode* A = (BiTNode*)malloc(sizeof(BiTNode));
	A->data = 'A';
	A->lchild = NULL;
	A->rchild = NULL;

	BiTNode* B = (BiTNode*)malloc(sizeof(BiTNode));
	B->data = 'B';
	B->lchild = NULL;
	B->rchild = NULL;

	BiTNode* C = (BiTNode*)malloc(sizeof(BiTNode));
	C->data = 'C';
	C->lchild = NULL;
	C->rchild = NULL;

	BiTNode* D = (BiTNode*)malloc(sizeof(BiTNode));
	D->data = 'D';
	D->lchild = NULL;
	D->rchild = NULL;

	BiTNode* E = (BiTNode*)malloc(sizeof(BiTNode));
	E->data = 'E';
	E->lchild = NULL;
	E->rchild = NULL;

	A->lchild = B;
	A->rchild = C;
	B->lchild = D;
	B->rchild = E;
	cout << "先序排序: ";
	PreOrder(A);
	cout << endl;

	cout << "中序排序: ";
	InOrder(A);
	cout << endl;

	cout << "后序排序: ";
	PostOrder(A);
	cout << endl;

	return 0;
}

运行结果

在这里插入图片描述
觉得我回答有用的话,记得点个关注哟!谢谢支持!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于 JVM

1、请你谈谈你对JVM的理解&#xff1f; JVM由JVM运行时数据区&#xff08;图示中蓝色框包含部分&#xff09;、执行引擎、本地库接口、本地方法库组成。 JVM运行时数据区&#xff0c;分为方法区、堆、虚拟机栈、本地方法栈和程序计数器。 1.方法区 Java 虚拟机规范中定…

YOLOv8-Seg改进:SPPF涨点篇 |引入YOLOv9的SPPELAN

🚀🚀🚀本文改进:SPP创新结合ELAN,来自于YOLOv9,助力YOLOv8,将SPPELAN代替原始的SPPF 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割…

day59 线程

创建线程的第二种方式 实现接口Runnable 重写run方法 创建线程的第三种方式 java.util.concurrent下的Callable重写call()方法 java.util.concurrent.FutureTask 创建线程类对象 获取返回值 线程的四种生命周期 线程的优先级1-10 default为5&#xff0c;优先级越高&#xff0c…

JavaEE进阶(15)Spring原理:Bean的作用域、Bean的生命周期、Spring Boot自动配置(加载Bean、SpringBoot原理分析)

接上次博客&#xff1a;JavaEE进阶&#xff08;14&#xff09;Linux基本使用和程序部署&#xff08;博客系统部署&#xff09;-CSDN博客 目录 关于Bean的作用域 概念 Bean的作用域 Bean的生命周期 源码阅读 Spring Boot自动配置 Spring 加载Bean 问题描述 原因分析 …

JavaEE企业开发新技术

目录 2.1 Class对象基本概念 1、概念 2.2 Class对象的获取方式 2.3基本数据类型的Class对象 1、概念 2.4 反射的基本概念 概念 2.5 Class对象的基本使用-1 2.6 Class对象的基本使用-2 newInstance()和new()区别&#xff1a; 2.1 Class对象基本概念 1、概念 反射的…

面试经典150题——合并两个有序链表

You just work on it. Time will do the rest! 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个题目还是比较简单的&#xff0c;通过分析题目&#xff0c;我们可以知道题目中关键信息为&#xff1a; 所以我们只需要从前向后遍历两个链表&#xff0c;在两个链表不空的情况下&…

白皮书发布|超融合运行 K8s 的场景、功能与优势

目前&#xff0c;不少企业都使用虚拟化/超融合运行 Kubernetes 和容器化应用。一些用户可能会有疑惑&#xff1a;既然 Kubernetes 可以部署在裸金属上&#xff0c;使用虚拟化不是“多此一举”吗&#xff1f; 在电子书《IT 基础架构团队的 Kubernetes 管理&#xff1a;从入门到…

Android中显式Intent和隐式Intent的区别

1、intent的中文名 称是意图&#xff0c;Intent是各个组件之间信息沟通的桥梁&#xff0c; 既能在Activity之间沟通&#xff0c;又能在Activity与Service之间沟通&#xff0c;也能在Activity与Broadcast之间沟通 **intent组成元素的列表说明**2、显式Intent&#xff0c;直接指定…

河北专升本(C语言编程题)

一&#xff1a;基础算法原理 1. 冒泡排序 原理&#xff1a;从左到右&#xff0c;相邻元素进行比较。每次比较一轮&#xff0c;就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序为例&#xff0c;第一轮比较后&#xff0c;所有数中最大的…

软考71-上午题-【面向对象技术2-UML】-UML中的图2

一、用例图 上午题&#xff0c;考的少&#xff1b;下午题&#xff0c;考的多。 1-1、用例图的定义 用例图展现了一组用例、参与者以及它们之间的关系。 用例图用于对系统的静态用例图进行建模。 可以用下列两种方式来使用用例图&#xff1a; 1、对系统的语境建模&#xff1b…

自动驾驶革命:解密端到端背后的数据、算力和AI奇迹

作者 |毫末智行数据智能科学家 贺翔 编辑 |祥威 最近&#xff0c;特斯拉FSD V12的发布引发了业界对端到端自动驾驶的热议&#xff0c;业界纷纷猜测FSD V12的强大能力是如何训练出来的。从马斯克的测试视频可以大致归纳一下FSD V12系统的一些核心特征&#xff1a; 训练数据&am…

Redis的集群模式

Redis有三种主要的集群模式&#xff0c;用于在分布式环境中实现高可用性和数据复制。这些集群模式分别是:主从复制(Master-Slave Replication)、哨兵模式(Sentinel)和Redis Cluster模式。 主从模式 主从复制是Redis最简单的集群模式。这个模式主要是为了解决单点故障的问题&a…

探索Cglib:解析动态代理的神奇之处

文章目录 CGLIB介绍CGLIB使用示例CGLIB核心原理分析代理类分析代理方法分析 FastClass机制分析 CGLIB介绍 CGLIB(Code Generation Library)是一个开源项目&#xff01;是一个强大的&#xff0c;高性能&#xff0c;高质量的Code生成类库&#xff0c;它可以在运行期扩展Java类与…

【echarts】xAxis鼠标事件失效问题

项目中用到echarts柱状图&#xff0c;出现x轴标签文字过长重叠问题&#xff0c;在pass掉标签倾斜、换行方案之后最终决定限制文字长度&#xff0c;超出以…占位&#xff0c;鼠标悬浮时显示完整tooltip。 但编写过程中发现xAxis鼠标事件无法触发&#xff0c;只有bar区域是可触发…

19 卷积层【李沐动手学深度学习v2课程笔记】

目录 1. 从全连接到卷积 2. 卷积层 3. 图像卷积代码 3.1 互相关运算 3.2 实现二维卷积层 3.3 图像中目标的边缘检测 3.4 学习卷积核 4. 小结 1. 从全连接到卷积 在欧几里得几何中&#xff0c;平移是一种几何变换&#xff0c;表示把一幅图像或一个空间中的每一个点在相同…

mysql中insert … select锁范围

1、执行 insert … select 的时候&#xff0c;对目标表也不是锁全表&#xff0c;而是只锁住需要访问的资源。 例如&#xff0c; CREATE TABLE t (id int(11) NOT NULL AUTO_INCREMENT,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),UNIQUE KEY c (c) ) EN…

streamlit初学-用streamlit实现云台控制界面

用streamlit实现云台控制界面 效果图PC上的效果手机上的效果 源码: 本文演示了,如何用streamlit做一个云台控制界面。功能包括:用户登录,事件的处理,图片的更新 版本信息: streamlit_authenticator: 下载链接streamlit : 1.31.1python: 3.11 修改点: streamlit_authenticato…

【嵌入式】字体极限瘦身术:Fontmin在嵌入式UI中的魔法应用(附3500常用汉字)

1. 概述 在嵌入式系统的用户界面&#xff08;UI&#xff09;设计中&#xff0c;字体的选择和优化至关重要。一个恰当的字体不仅能够提升用户体验&#xff0c;还能彰显产品特色。然而&#xff0c;由于嵌入式设备常常受限于存储空间和处理能力&#xff0c;大型字体文件可能成为性…

arkTS语法

lineHeight与css不同&#xff1f; 1、arkTS是什么 在继承了TS语法的基础上&#xff0c;主要扩展了声明式UI开发相关的能力 声明式UI是一种编写用户界面的范式。 2、声明组件的完整语法 3、自定义组件的语法使用 struct arkTS新增的关键字&#xff0c;是用于自定义组件或者自…

餐饮行业咨询数据在哪里查找?

1.中国饭店协会&#xff1a;国资委和商务部等政府指导发展&#xff0c;参与制定行业国家标准、行业标准与行业自律规则。按月出版《中国饭店业》会员刊物、及时更新协会官方网站和官方微信&#xff0c;方便会员单位及时掌握国内外饭店与餐饮业的最新动态。宣传企业经典案例、反…