二叉树的建立

二叉树的创建(数据结构) C语言版 目录一.二叉树的存储结构二.二叉树的创建三.二叉树的遍历1.先序遍历2.中序遍历3.后序遍历4.层序遍历二叉树的基本存储结构如下所示leftchild:存储左孩子节点的地址rightchild:存储右孩子节点的地址data:当前节点存储的信息 二.二叉树的创建 创建一棵二叉树的关键在于如何将一个一个的节点按照树的脉络连接起来,在这里我们选择用一棵最小的满二叉树来说明我们需要首先创建根节点,并且向里面保存数据,然后接着在向左孩子里面输入数据,最后是右孩子,其实这种从根节点开始,依次访问左节点,右节点的方式叫做 阅读详情

被二叉树折磨的死去活来,这里是二叉树的建立,从书上摘抄代码并注上注释,留下来方便以后学习吧,加油阿菜T-T.

从文本文件读入一组整数,用一颗二叉树存储着些整数,读入的第一个整数存储在根结点root上,以后每读一个整数时,向root代表的二叉树上插入一个新的结点,存储所读入的整数,在最终的二叉树上,任取一个结点A:A的值不小于它左子树上任何的值,它右子树上每个值都大于A的值。附上代码:

#include<stdio.h>
#include<stdlib.h>

struct TreeNode{//二叉树节点的数据类型 , 
	//数据域 ,数据域定义了要存储的数据元素的类型 
	int val;
	//指针域 ,定义两个指针 ,左指针和右指针,它们的类型必须与二叉树结点的数据类型一致 
	TreeNode*left,*right;
};

TreeNode * insertTree(TreeNode * root,int val){//向二叉树中添加新的结点 ,此处定义了一个递归函数,向二叉树中添加新的结点 
	TreeNode * newNode;
	if(root==NULL){//如果root所指向的二叉树为空,则将新结点作为二叉树的根节点 
		newNode=new TreeNode;//每次添加一个结点,存储元素值val 
		newNode->val=val;
		newNode->left=NULL;
		newNode->right=NULL;
		return(newNode);
	}
	
	if(val<=root->val)//如果val小于或等于root的值,将新结点插入到root结点的左子树上 
		root->left=insertTree(root->left,val);
	else//如果val大于root结点的值,将新结点插在root结点的右子树上。 
		root->right=insertTree(root->right,val);
		
	return(root);
}

void delTree(TreeNode * root){//此处定义一个递归函数,删除root所指向的二叉树的形状 ,释放各个节点所占用的存储空间
	if(root->left!=NULL) delTree(root->left);//删除左子树 
	if(root->right!=NULL) delTree(root->right);//删除右子树 
	delete root;//删除根结点 
	return;
}

void printTree(TreeNode * root,char offset[]){//此处定义一个递归函数,用来查看root所指向的二叉树的形状。  
	char str[81];
	printf("%s%d\n",offset,root->val);//根结点的值输出在第一行的第一个位置 
	sprintf(str,"%s%s",offset," ");
	
	if(root->left!=NULL)//根结点输出后,接着输出左子树 
		printTree(root->left,str);
	else//如果左子树为空,则在对应行输出一个$字符 
		printf("%s$\n",str);
	if(root->right!=NULL)//在输出右子树 
		printTree(root->right,str);
	else//如果右子树为空,则在对应行输出一个$字符 
		printf("%s$\n",str);
		
	return;
}

int main()
{
	FILE*fin;
	TreeNode*root;
	int val;
	char str[81],inFile[30];
	
	printf("input the data file's name:");
	scanf("%s",inFile);
	fin=fopen(inFile,"r");
	//从输入文件中读入数据,建立一个二叉树 
	root=NULL;
	while(fscanf(fin,"%d",&val)!=EOF)root=insertTree(root,val);
	fclose(fin);
	//看看所建立的二叉树的形状 
	sprintf(str,"%s"," ");
	printTree(root,str);
	//删除所建立的二叉树 
	delTree(root);
	return 0;
}

运行结果:

二叉树的创建和基本操作(详解) 本文主要讲解递归实现二叉树的代码,对于树,二叉树的性质概念不多赘述我们以'#'代表空结点(为已有结点下的左右空孩子),方便创建二叉树,我们以下图的二叉树作为讲解。 阅读详情

相关推荐

二叉树的建立与遍历

【问题描述】 以二叉链表的形式创建二叉树(不超过20个结点),并编写二叉树的遍历算法,实现二叉树的三种遍历。 【输入形式】 输入二叉树的结点信息(以先序建立的方式)。 【输出形式】 输出二叉树的三种遍历序列。

AIGC 2607

二叉树的各种创建方法

1.前序创建#include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;stdlib.h&gt; #include&lt;malloc.h&gt; #include&lt;iostream&gt; #include&lt;stack&gt; #include&lt;queue&gt; using namespace std; typed

lingling_nice的博客 7万+

【数据结构】建立二叉树、二叉树的推导技巧

逆向思维指的是反向思考问题的能力。而我们的二叉树的建立推导过程,就是运用了逆向思维。在得到的二叉树前序、中序、后序遍历的结果后,在根据2种不同的遍历结果,反向推导出二叉树集合。...

四季轮换叶,一路招摇胜 5407

数据结构——二叉链表创建二叉树(C语言版)

数据结构——二叉链表创建二叉树一、思想(先序思想创建):二、创建二叉树(1)传一级参数方法 一、思想(先序思想创建): 第一步先创建根节点,然后创建根节点左子树,开始递归创建左子树,直到递归创建到的节点下不继续创建左子树,也就是当下递归到的节点下的左子树指向NULL,结束本次左子树递归,返回这个节点的上一个节点,开始创建右子树,然后又开始以当下这个节点,继续递归创建左子树,左子树递归创建完,就递归创建右子树,直到递归结束返回到上一级指针节点(也就是根节点下),此时根节点左边子树创建完毕,开始创建右边子树,

正弦定理的博客 6万+

高效获取Sentinel-2影像:哥白尼数据中心下载全流程解析

本文提供了一份从哥白尼数据中心高效下载Sentinel-2卫星影像的保姆级指南。详细解析了从账号注册、使用Copernicus Browser界面、精准划定研究区域,到利用云量覆盖、时间范围等关键条件筛选L2A地表反射率产品的全流程,旨在帮助用户快速获取高质量遥感数据,避免常见错误。

weixin_29247219的博客 259

深入解析set_clock_groups:异步时钟约束的最佳实践与陷阱规避

本文深入解析了FPGA/芯片设计中set_clock_groups命令在异步时钟约束中的核心作用与最佳实践。文章对比了同步时钟、异步时钟与不重叠时钟的区别,强调了正确使用set_clock_groups避免时序分析陷阱的重要性,并提供了与set_false_path的优先级差异分析及实战规避方法,帮助设计者确保时序收敛与电路可靠性。

weixin_29232121的博客 376

二叉树的建立与遍历详解

1、二叉树的建立与遍历分布详解 定义二叉树结构体: typedef struct BinaryTreeNode { TelemType data; struct BinaryTreeNode *Left; struct BinaryTreeNode *Right; }Node; 创建二叉树: Node* createBinaryTree() { Node ...

floating_fight的博客 6014

银河麒麟V10离线安装VLC播放器:依赖处理与3.0.9.2版本实操指南

在国产化操作系统日益普及的背景下,软件安装方式成为政企内网用户关注的重点。离线安装作为一种不依赖公网源的部署手段,常用于解决内网环境下的软件获取问题。其核心在于理解Linux包管理机制,如dpkg与apt对依赖关系的处理逻辑。掌握这一原理,不仅能应对多媒体软件的部署,也能提升系统维护效率。VLC作为跨平台多媒体播放器,凭借强大的解码能力与协议支持,广泛应用于本地视频播放、RTSP拉流及监控大屏等场景。本文从离线安装的通用概念出发,结合银河麒麟V10桌面版的实际环境,详细梳理了VLC 3.0.9.2离线包的获

weixin_32247165的博客 374

建立一个二叉树及遍历二叉树的步骤(C语言)

建立一个简单二叉树的基本步骤

qq_49175846的博客 1万+

详细介绍pytorch重要的API

Tensor 是 PyTorch 中最基本的数据结构,提供了多种创建和操作张量的函数。Autograd 提供了自动求导功能,可以跟踪 Tensor 上的操作并计算梯度。损失函数用于衡量模型预测值与真实值之间的差异,提供了多种损失函数。是构建神经网络的基础类,提供了定义网络层和前向传播的方法。提供了 GPU 计算的支持,包括设备管理、内存管理等。提供了一些常用的函数式操作,如激活函数、损失函数等。提供了常用的数据集、模型架构和图像转换工具。提供了数据加载和预处理的工具,包括。

hello! 1223

华为OD机试双机位C卷-字符串解密(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【字符串解密】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 字符串解密。

qq_45776114的博客 734

用二叉链表建立二叉树

1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct node 4 { 5 int data; 6 struct node *l,*r; 7 8 }tree; 9 tree* Creattree(void)//层次建立二叉树 10 {...

dizp47129的博客 1846

硬件工程师学习-硬件的单元测试(UT)(1)电源与时钟的测试

我们在设计的时候,通过控制电源的上电使能管脚或者通过MOSFET、或者专用的电源上电控制芯片,控制不同电源的上电时序,以确保每个芯片的电源上电时序是满足芯片的要求的。我们在测试的时候,需要对相关的要求一一测试,以确认每个上电时序满足要求的。在维基百科中,相位噪声的定义是“时域不稳定性(抖动)导致波形在相位上发生快速、短期、随机的波动,这种波动在频域中的表现即为相位噪声”。单元测试,一般是指基于开发人员自行开展的功能测试及各个功能单元的单元测试,是硬件信号级的测试,分为基本测试和信号完整性测试。

qq_43416206的博客 4037

python二叉树的建立和遍历

python二叉树 二叉树的建立: # -*- coding : utf-8 -*- class Node: def __init__(self,value=None,left=None,right=None): self.value = value self.left = left self.right = right if __name__ =='__main__': root...

Stupid-Tyro的博客 2281

MATLAB代码实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响

这段MATLAB代码主要实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响。通过以上步骤,该代码能够找到一条在考虑船舶性能和气象条件下,从大连港到格拉斯通港的较优航线,最小化燃油消耗和航行时间的加权和。

AI的内部世界的博客 513

故障排查:OpenClaw 更新后 feishu 插件路径失效的解决方法

OpenClaw 更新后 feishu 插件路径失效的解决方法发现问题→ Gateway 启动失败,报插件路径错误定位原因→ OpenClaw 目录结构变化,→解决问题→ 更新为正确的路径验证修复→ 使用确认一切正常。

刘一说的IT专栏 1306

线索二叉树建立

今天学习了线索二叉树的建立,于是走了一遍代码 #include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> using namespace std; /* 二叉树线索存储结构的定义 Link=0;代表指向左右孩子的指针 Thread=1, 代表指向前驱或者后继的...

Zyong139064359的博客 510

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C语言二叉树建立与遍历—实验报告

系别计算机学院班级学号姓名课程名称数据结构实验日期实验名称二叉树的建立与遍历算法应用成绩实验目的:熟悉掌握二叉链表存储结构及基本算法,并能应用二叉树的基本算法解决与之有关的简单问题,训练和提高结构化程序设计能力及程序调试能力。实验条件:计算机一台,Visual C++6.0或DEV C++判断一棵二叉树是否为满二叉树。要求二叉树用二叉链表存储,用先序、中序、后序递归遍历算法的任意两种输出二叉树中所有结点,编写程序判断该树是否为满二叉树。int val;// 结点的值。

冰小九的博客 2411

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数据结构(二叉树)——二叉树的建立、存储、遍历

建立二叉树,并通过调用函数,,输出先序遍历、中序遍历与后序遍历的结果 #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 //DataType 是二叉树数据元素类型,此程序定义为char型 typedef char DataType; typedef struct Node { Data

haha_7的博客 933

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

二叉树建立的输入问题

这几天在看数据结构的二叉树,被二叉树建立时的输入问题困扰很久。二叉树的建立一般使用递归算法,将所有节点的数据一股脑的输入,递归无法停止,二叉树就无法建立。 感谢此博文,原来我们在输入节点数据的时候,必须输入空闲叶子节点,并用特殊符号标记,比如上述的博文的空闲叶子节点采用‘0’作为标记符,就能完整建立二叉树。 修改后的代码,亲测有效: #include&lt;iostream&gt; #in...

wudongming_000的博客 1万+

二叉树的建立及其递归遍历(C语言实现)

本文转载自二叉树的建立及其递归遍历(C语言实现) 最近在学习数据结构中树的概念,迟迟不得入门,应该是自己的懒惰和没有勤加练习导致的,以后应该多加练习 以下是我对二叉树的一些总结内容 二叉树的特点有: - 每一个节点最多有两棵子树,所以二叉树中不存在度大于2的节点,注意,是最多有两棵,没有也是可以的 左子树和右子树是有顺序的,次序不能颠倒,这点可以在哈夫曼编码中体现, 顺序不同编码方式不同...

zhc的博客 7282

【算法导论】二叉树的建立

二叉树的建立 基本概念:         有序树与无序树:若将树中的每个节点的各个子树都看成是从左到右有次序的,则称该树为有序树,否则为无序数。         顺序存储:从根节点起,自上而下,从左至右的方式对节点进行顺序编号,编号即对应为要存储的数组的下标。于是节点与数组元素就一一对应了。         满二叉树、完全二叉树、非完全二叉树的区别:

青峰碧陋室 3641

二叉树的建立(指针)

二叉树的建立 建立结点 typedef struct btnode *btlink; typedef struct btnode { int data; btlink left; btlink right; }Btnode; 创建结点 btlink NewNode() { btlink m=new btnode;//很重要 开辟btnode大小的空间不是指针 return m; } 创建树 typedef struct Binarytree *btree; typedef struct Bin

Lyhlcs的博客 1189
下一篇: 数据结构线性表虽碎知识点点点
aaayr
博客等级 码龄9年 3粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值