二叉树的递归遍历->先序,中序,后序,拷贝,释放

二叉树(一):二叉树的创建以及三种遍历方法的递归实现 我们都知道现实生活中的树长什么样,那么,很明显,二叉树就是一棵“树”,不过它是一个存储数据的一种结构,根在上,向下生长。 当然,这样的存储结构只是其中的一种。在这里,就要引出二叉树的存储和二叉树的遍历了! 树:n(n>=0)个结点的有限集合,n=0时为空树。 二叉树的三种遍历方式 阅读详情

在vs2017可直接运行

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct BiNode
{
	char ch;
	struct BiNode *lchild; /* 左孩子 */
	struct BiNode *rchild; /* 右孩子 */
}BNODE;


void recursion(BNODE *root)
{
	if (NULL == root)
		return;
	
	//printf("%c  ", root->ch);		//先序遍历
	
	/* 递归遍历左子树 */
	recursion(root->lchild);
	//printf("%c  ", root->ch);		//中序遍历
	/* 递归遍历右子树 */
	recursion(root->rchild);
	printf("%c  ", root->ch);		//后序遍历
}

/* 递归拷贝二叉树 */
BNODE *copyBinode(BNODE *root)
{
	if (root == NULL)
		return NULL;

	/* 先拷贝左子树 */
	BNODE *newLchild = copyBinode(root->lchild);
	/* 在拷贝右子树 */
	BNODE *newRchild = copyBinode(root->rchild);

	BNODE *newRoot = malloc(sizeof(BNODE));
	newRoot->lchild = newLchild;
	newRoot->rchild = newRchild;
	newRoot->ch = root->ch;

	return newRoot;
}
/* 递归释放拷贝的二叉树 */
void freeSpace(BNODE *root)
{
	if (NULL == root)
		return;

	freeSpace((root)->lchild);
	freeSpace((root)->rchild);

	/* 释放其实是后序遍历*/
	printf("%c被释放\n", root->ch);
	free(root);
}
void test()
{
	BNODE nodeA = { 'A', NULL, NULL };
	BNODE nodeB = { 'B', NULL, NULL };
	BNODE nodeC = { 'C', NULL, NULL };
	BNODE nodeD = { 'D', NULL, NULL };
	BNODE nodeE = { 'E', NULL, NULL };
	BNODE nodeF = { 'F', NULL, NULL };
	BNODE nodeG = { 'G', NULL, NULL };
	BNODE nodeH = { 'H', NULL, NULL };

	nodeA.lchild = &nodeB;
	nodeA.rchild = &nodeF;

	nodeB.rchild = &nodeC;

	nodeC.lchild = &nodeD;
	nodeC.rchild = &nodeE;

	nodeF.rchild = &nodeG;

	nodeG.lchild = &nodeH;

	printf("后序遍历: ");
	recursion(&nodeA);
	printf("\n*****************************\n");
	BNODE *newroot = copyBinode(&nodeA);
	printf("后序遍历: ");
	recursion(newroot);
	printf("\n*****************************\n");
	freeSpace(newroot);
	newroot = NULL;
}

int main()
{
	test();
	system("pause");
	return 0;
}
C语言数据结构六:树。二叉树遍历。先序遍历,中序遍历,后序遍历。二叉树叶节点数,二叉树高度,二叉树拷贝;二叉树释放。 (二叉)树中,一个节点,你也要把他看做成树。子树。一个节点都没有叫做空树。所以说:树具有递归性。树是非线性结构,有一个,但是可能有很多。树中,应用最多的还是二叉树。 阅读详情

相关推荐

二叉树遍历(递归与非递归)

二叉树二叉树基本概念二叉树的遍历二叉树递归遍历求叶子结点数目求树的深度拷贝,释放二叉树二叉树非递归遍历 二叉树基本概念 定义: n(n≥0)个结点的有限集合,由一个根结点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成 基本特点: 每个结点最多只有两棵子树(不存在度大于2的结点); 左子树和右子树次序不能颠倒(有序树)。 二叉树性质: 性质1: 在二叉树的第i层上至多有2i-1个结点(i>0) 性质2: 深度为k的二叉树至多有2k-1个结点(k>0) 性质3: 对于任何一棵二叉树,若度为2

log_Li的博客 559

(1)写个二叉树遍历和释放

写个二叉树遍历和释放 #include<iostream> #include<string> using namespace std; struct Node { char _ch; Node* _leftchild; Node* _rightchild; Node(char ch,Node *leftchild=nullptr, Node *rightchild = nullptr) { _ch = ch; _leftchild = leftchild;

Alsn86的博客 261

链式二叉树的后序创建、递归后序遍历、非递归堆栈后序遍历、后序销毁

链式二叉树的后序创建、递归后序遍历、非递归堆栈后序遍历、后序销毁

二叉树的先序、中序、后序遍历和复制

// binary.h // #include"stack.h" char Getdata() {char data; cin>>data; return data;} //Getdata void CreateBiTree(BiTree &T)//建立二叉链表{char ch;...

baiyu8774的博客 338

卫星图像检测,分割,跟踪,超分辨率,数据集调研,以及论文笔记

目标检测,针对物体有很多类如桥,烟囱,罐子等,有静态图像下的检测,也就是图像源头多来自谷歌地图,但是前后帧没有任何联系,并且谷歌地图相对来说比较清楚,难度小一点,也有粗粒度以及较细粒度的检测,然后卫星视频的数据集较少,则可以通过前后帧的联系来辅助检测,并且卫星帧基本上只对车,船,飞机,火车进行检测,没有进行细粒度的检测即将车辆分类为卡车,皮卡,小轿车,但是关船,则可以分类为货船以及军舰,因为目前的卫星视频中小车实在太少了,难以进行更细粒度的检测。luojia 三号卫星。

zhangzhao147的博客 4707

虚幻引擎5 AR开发教程02:构建和测试AR Android App

在本教程中,我们将学习如何在虚幻引擎 5 上构建和测试 AR 安卓应用。

mopanchun的博客 2650

二叉树的顺序存储、先序构造、先序遍历、先序销毁

#include<stdio.h> #include<stdlib.h> typedef struct BT { int data; struct BT * leftchild; struct BT * rightchild; } tree; void create(int bt[],tree *root,int i,int length); void traval(int...

hnujunjie的博客 460

西门子smart能搜到cpu但连接当前IP地址失败

将ip地址改到同一网段 本机为192.168.1.119就是192.168.1.1网段,但plc在192.168.0.1网段,所以显示ip连接失败,改为同一网段192.168.1.xxx即可(为避免ip冲突尽量改到200往后最大255)如果显示这一步,那么你的物理连接是没有问题的,应当是plc和电脑并不在同一网段导致的问题。输入ipconfig 查看本机网段与plc是否为同一网段。此电脑就不在同一网段所有造成通讯失败,接下来解决这个问题。win+r打开运行,打开cmd。再次尝试,如果还是报错,那么。

weixin_62678581的博客 9864

数据结构-二叉树(先序、中序、后序遍历二叉树的递归算法)

思路 二叉树的遍历满足递归的形式 二叉树的遍历满足递归的思路,无论是先序的根左右,中序的左根右,还是后续的左右跟都是从根结点开始,对每个结点进行先序/中序/后序的遍历,每个结点都是如此,假如是先序根左右的遍历,我们先访问根结点,然后再是左结点,但是左结点没结束,对左结点又进行一遍根左右的遍历,那么对于左结点自己来说,他自己就是根结点了,然后进行根左右遍历,于是又对总根结点的左结点的左结点再来一次先...

abcnull 的博客 2425

从零搭建ROS机械臂仿真环境:Ubuntu 20.04+Noetic下配置睿尔曼RM65的完整流程

本文详细介绍了在Ubuntu 20.04系统中,基于ROS Noetic搭建睿尔曼RM65机械臂的完整仿真环境。从环境准备、工作空间创建到MoveIt!配置与Gazebo仿真环境集成,提供了完整的流程和优化建议,帮助开发者高效实现机械臂仿真与调试。

v6b7n8m9q0的博客 933

导数在工程与AI中的12个实战应用解析

导数作为数学中的基本概念,本质是描述变化率的工具,其核心价值在于将非线性问题局部线性化处理。从原理上看,通过极限过程捕捉函数瞬时变化特性,使工程师能精确控制系统动态行为,帮助科学家量化自然规律变化速率。在技术实现层面,现代符号计算(如Mathematica)、数值计算(如MATLAB)和自动微分(如PyTorch)工具链的发展,大幅提升了导数计算的效率与精度。典型应用场景涵盖机械控制(如ABS防抱死系统)、金融工程(如期权希腊值计算)、医疗影像(如Canny边缘检测)等领域。特别在机器学习中,反向传播算法依

weixin_35509395的博客 316

数据结构与算法-二叉树的遍历

数据结构与算法-二叉树的遍历

qq_73121173的博客 824

MATLAB 论文复现——面向电量-调频-容量市场的数据中心园区算力及电力资源规划

如何在保证数据中心服务质量的前提下,考虑数据中心负荷转移特性,并对其进行合理规划,对降低数据中心规划总成本及提升新型电力系统灵活性均有显著意义。然后,根据不同电力市场的结算规则,研究了数据中心园区参与电量-调频-容量市场的方式和经济收益。在此基础上,以综合成本最小化为目标,优化数据中心园区发电机、储能的建设容量以及服务器的建设数量。最后,以阿里巴巴公开运行数据为例,证明考虑多元电力市场能够大大降低数据中心规划成本,激励数据中心园区投资建设更多灵活性资源,为电网提供有效的调频服务和容量支撑。

sjr1478的博客 666

c语言 二叉树(先序、中序、后序(递归和非递归法)、拷贝、释放、树的高度、叶子数)

文章目录1、基础概念1.1、先、中、后(序)2、代码实现2.1初始化和上图一样结构的一棵树2.2、递归遍历2.3、二叉树叶子数2.4、树的高度2.5、拷贝二叉树、销毁2.6、整体功能测试3、非递归先、中、后(序)遍历3.1、代码实现3.2、c语言创建栈的代码3.3、完整使用 1、基础概念 叶子:没有后续节点 双亲:直接前驱节点 节点度:直接后继的节点数 树的度:节点的度中取最大的值 性质1:在二叉树的第i层上至多有2^(i-1)个节点(i>0) 性质2:深度为k的二叉树至多有(2^k)-1个节点(k

weixin_45715405的博客 1516

Jev模型入门:从API接入到本地部署的完整实践指南

大模型的应用方式正从单一聊天窗口转向复杂的自动化工作流,而推理模型因具备指令跟随与结构化输出能力,成为构建Agent和数据处理管线的关键组件。Jev作为面向通用场景的推理模型,不仅提供了OpenAI兼容的API接口,还支持本地量化部署,兼顾隐私、可控性与长期成本。本文从模型定位出发,明确Jev与基座模型的差异,随后介绍密钥管理、API调用、参数调优,并深入演示基于Ollama与llama.cpp的本地部署流程,包括GGUF模型文件与chat template的匹配要点。针对实践中的常见问题,如密钥泄露、ma

weixin_29057237的博客 358

FPGA以太网接口设计避坑指南:GMII与RGMII时序转换的三种实现方案对比

本文深入解析FPGA以太网接口设计中GMII与RGMII时序转换的三种实现方案,包括Xilinx官方IP核、手工原语逻辑和开源方案gmii_to_rgmii。通过对比分析各方案的优缺点和适用场景,为工程师提供技术选型指南,帮助避免常见设计陷阱,提升高速网络设备开发的效率和可靠性。

weixin_42570484的博客 382

二叉树的二叉链表表示与基本操作

关于二叉树的二叉链表表示与基本操作! 含伪代码! 附源码!

秋之颂的博客 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

二叉树的遍历方式(递归)

二叉树的遍历方式(递归)博客摘要:博客链接:非递归遍历二叉树 1.什么是二叉树的遍历? 四种遍历是什么? 2.递归的实现二叉树的遍历; (下一篇博客将讲述三种遍历的非递归实现) 一. 什么是二叉树简述:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。例如下图: 二.四种遍历本篇博客讲述二叉树的四种遍历:前序遍历,中序遍历,后序遍历,层序遍历

John的博客 2542

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

非递归前序、中序遍历代码推演出后序遍历代码(极其透彻)

为何非递归前序和后序遍历代码套路不能使用在非递归后序遍历中,非递归后序遍历代码怎么来的?详细解释,非常透彻!

kashine的博客 1851

二叉树的先序、中序、后序递归非递归实现

【先序】 递归实现: void PreOrderTraversal(BinTree BT){ if(BT){ cout << BT->Data; PreOrderTraversal(BT->Left); PreOrderTraversal(BT->Right); } } 非递归 ①建立一个栈,并把根节点放入栈中 ②进入循环,循环条件是栈不为空 1°新...

weixin_43333890的博客 181

二叉树的各种遍历实现伪代码

本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net 最近需要复习一下基础算法,今天先来个二叉树的几种遍历方式的伪代码吧。其中每种遍历方式都分为递归和非递归两种。下面的

sunjiangangok的博客 1万+

数据结构-二叉树操作(创建、先序、中序、后序遍历、计算叶子节点数目、计算二叉树深度、左右子树交换、随机数列产生排序树、查找结点、删除节点、广度遍历、非递归先序遍历)C语言源码(全)

数据结构-二叉树操作(创建、先序、中序、后序遍历、计算叶子节点数目、计算二叉树深度、左右子树交换、随机数列产生排序树、查找结点、删除节点、广度遍历、非递归先序遍历)C语言源码(全) #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #include&amp;lt;time.h&amp;gt; #define null 0 #define ElemType int #...

springhammer的博客 1881

由前序遍历和中序遍历还原二叉树

1.由前序遍历和中序遍历还原二叉树 对应letecode链接: 105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode) (leetcode-cn.com) 题目描述: 给定一棵树的前序遍历preorder 与中序遍历inorder。请构造二叉树并返回其根节点。 示例 1: Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] Output: [3,9,20,null,null,15,7] 示例 2: Inpu...

qq_56999918的博客 8362

前序、中序、后序遍历的使用场景分析

若根的操作不依赖子树→ 用前序;若根的操作依赖所有子树的结果→ 用后序;若处理二叉搜索树的有序序列 / 重构二叉树→ 用中序;多叉树仅需区分前序 / 后序,根据 “根与子树的依赖关系” 选择。

furende31的博客 906

二叉树遍历序列逆向重构:从先序中序推导后序的C++递归实现

二叉树遍历是数据结构与算法中的核心基础概念,包括先序、中序和后序三种主要方式,它们通过不同的节点访问顺序来刻画树的结构。其原理在于利用根节点、左子树和右子树的相对位置关系,实现对树形数据的系统化访问。掌握遍历技术对于理解递归、分治等算法思想具有重要价值,广泛应用于编译器设计、文件系统管理和数据库索引等场景。本文聚焦于一个经典问题:如何利用已知的先序遍历序列和中序遍历序列,通过递归分治算法高效重构二叉树并输出后序遍历序列。文章深入剖析了序列定位与哈希优化等关键技术,提供了从基础实现到工程优化的C++代码示例,

weixin_30846347的博客 217
上一篇: 树与二叉树
下一篇: 递归计算二叉树的深度和叶子结点
山有木兮啊
博客等级 码龄8年 135粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值