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

摘自:数据结构——二叉链表创建二叉树(C语言版)
作者:正弦定理
发布时间:2020-12-08 15:36:21
网址:https://blog.csdn.net/chinesekobe/article/details/110873792

数据结构——二叉链表创建二叉树

  • 一、思想(先序思想创建):
  • 二、创建二叉树
    • (1)传一级参数方法
    • (2)传二级参数方法

一、思想(先序思想创建):

第一步先创建根节点,然后创建根节点左子树,开始递归创建左子树,直到递归创建到的节点下不继续创建左子树,也就是当下递归到的节点下的左子树指向NULL,结束本次左子树递归,返回这个节点的上一个节点,开始创建右子树,然后又开始以当下这个节点,继续递归创建左子树,左子树递归创建完,就递归创建右子树,直到递归结束返回到上一级指针节点(也就是根节点下),此时根节点左边子树创建完毕,开始创建右边子树,原理和根节点左边创建左右子树相同

二、创建二叉树

二叉树的操作通常使用递归方法,如果递归不太明白,建议去对此进行一下学习和练习。二叉树的操作可以分为两类,一类是需要改变二叉树的结构的,比如二叉树的创建、节点删除等等,这类操作,传入的二叉树的节点参数为二叉树指针的地址,这种参入传入,便于更改二叉树结构体的指针(即地址)。这里稍微有一点点绕,可能需要多思考一下

  • 如下是二叉数创建的函数,这里我规定,节点值为整数,如果输入的数为-1,则表示结束继续往下创建子节点的操作。然后我们使用递归的方法以此创建左子树和右子树

二叉树结构体初始化

为了更方便的使用二叉树结构体,可以使用 typedef 对结构体进行命名

typedef struct Tree{int data;					//	存放数据域struct Tree *lchild;			//	遍历左子树指针struct Tree *rchild;			//	遍历右子树指针}Tree,*BitTree;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这里展示两种传参类型的创建方法,其中深意可多次参考理解,加深指针理解

(1)传一级参数方法

BitTree CreateLink()
{int data;int temp;BitTree T;scanf("%d",&data);		//	输入数据temp=getchar();			//	吸收空格if(data == -1){			//	输入-1 代表此节点下子树不存数据,也就是不继续递归创建return NULL;}else{T = (BitTree)malloc(sizeof(Tree));			//		分配内存空间T->data = data;								//		把当前输入的数据存入当前节点指针的数据域中printf("请输入%d的左子树: ",data);		T->lchild = CreateLink();					//		开始递归创建左子树printf("请输入%d的右子树: ",data);			T->rchild = CreateLink();					//		开始到上一级节点的右边递归创建左右子树return T;							//		返回根节点}	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

(2)传二级参数方法

BitTree CreateLink(BitTree *T)		//	次数 T为指向根节点的指针的地址
{int data;	scanf("%d",&data);if(data == -1){*T=NULL;				//	结束递归时,让指针当前节点的指针地址的 指针 指向NULL}else{*T = (BitTree)malloc(sizeof(Tree));		//	对指向节点指针地址的指针 分配内存if(!(*T) ){			//	*T = NULL  表示分配内存失败,也就是结束递归创建了printf("内存分配失败\n");exit(-1);}(*T)->data = data;		//	给节点指针地址内的数据域,存入数据printf("请输入%d的左子树: ",data);CreateLink(&(*T)->lchild);		//	开始遍历左子树printf("请输入%d的右子树: ",data);CreateLink(&(*T)->rchild);		//	开始遍历右子树,遍历的思想文章开头处解释}	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

(1)一级参数完整例子:

#include<stdio.h>
#include<stdlib.h>typedef struct Tree{int data;					//	存放数据域struct Tree *lchild;			//	遍历左子树指针struct Tree *rchild;			//	遍历右子树指针}Tree,*BitTree;BitTree CreateLink()
{int data;int temp;BitTree T;scanf("%d",&data);		//	输入数据temp=getchar();			//	吸收空格if(data == -1){			//	输入-1 代表此节点下子树不存数据,也就是不继续递归创建return NULL;}else{T = (BitTree)malloc(sizeof(Tree));			//		分配内存空间T->data = data;								//		把当前输入的数据存入当前节点指针的数据域中printf("请输入%d的左子树: ",data);		T->lchild = CreateLink();					//		开始递归创建左子树printf("请输入%d的右子树: ",data);			T->rchild = CreateLink();					//		开始到上一级节点的右边递归创建左右子树return T;							//		返回根节点}	}void ShowXianXu(BitTree T)			//		先序遍历二叉树
{if(T==NULL){return;}printf("%d ",T->data);ShowXianXu(T->lchild);			//	递归遍历左子树ShowXianXu(T->rchild);			//	递归遍历右子树
}int main()
{BitTree S;printf("请输入第一个节点的数据:\n");S = CreateLink();			//		接受创建二叉树完成的根节点ShowXianXu(S);				//		先序遍历二叉树return 0;	
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

(2)二级参数完整例子

#include<stdio.h>
#include<stdlib.h>
typedef struct Tree{int data;struct Tree *lchild;struct Tree *rchild;
}Tree,*BitTree;BitTree CreateLink(BitTree *T)		//	次数 T为指向根节点的指针的地址
{int data;	scanf("%d",&data);if(data == -1){*T=NULL;				//	结束递归时,让指针当前节点的指针地址的 指针 指向NULL}else{*T = (BitTree)malloc(sizeof(Tree));		//	对指向节点指针地址的指针 分配内存if(!(*T) ){			//	*T = NULL  表示分配内存失败,也就是结束递归创建了printf("内存分配失败\n");exit(-1);}(*T)->data = data;		//	给节点指针地址内的数据域,存入数据printf("请输入%d的左子树: ",data);CreateLink(&(*T)->lchild);		//	开始遍历左子树printf("请输入%d的右子树: ",data);CreateLink(&(*T)->rchild);		//	开始遍历右子树,遍历的思想文章开头处解释}	}void ShowXianXu(BitTree T)		//	先序遍历二叉树
{if(T==NULL){return;}printf("%d ",T->data);ShowXianXu(T->lchild);		//	遍历左子树ShowXianXu(T->rchild);		//	遍历右子树
}int main()
{BitTree *S;			//	创建指向这个结构体指针地址 的指针printf("请输入第一个节点的数据:\n");CreateLink(&S);		//	传二级指针地址ShowXianXu(S);		return 0;	
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

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

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

相关文章

pca图解读_干货!手把手一步一步解读PCA分析,逃学博士尽力了!

01 引言之前发了几篇文章关于矩阵中 特征向量和PCA主元分析的文章&#xff0c;大家反响不错。当时并没有涉及到数学运算&#xff0c;只是大概讲了讲原理。这篇文章我们一起来一步一步解读PCA的计算过程如何用Python实现PCA分析准备就绪02 第一步&#xff1a;数据获取第一步&…

中南月赛 1313: ZZY的宠物

1313: ZZY的宠物 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 114 Solved: 59[Submit][Status][Web Board]Description ZZY领养了一对刚刚出生的不知名小宠物..巨萌巨可爱!!...小宠物的生命为5个单位时间并且不会在中间出意外翘辫子(如: 从0出生能活到5但活不到6)..小宠物…

查询大于2分钟的数据

查询大于2分钟的数据select * from dt_appsdk_users where datediff(mi,update_time,getdate()) > 2转载于:https://www.cnblogs.com/sntetwt/p/9838012.html

数据结构——二叉树根节点到特定节点路径(C语言版)

摘自&#xff1a;数据结构——二叉树根节点到特定节点路径&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-10 21:09:43 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/110991771 二叉树——根节点到特定节点路径…

实用插件_精选 10 个非常实用的 VS Code 插件

来源&#xff1a;Daan原文&#xff1a;https://medium.com/better-programming/10-extremely-helpful-visual-studio-code-plugins-for-programmers-c8520a3dc4b8无论你是经验丰富的开发人员还是刚刚开始第一份工作的初级开发人员&#xff0c;你都会想让自己的开发工作尽可能轻…

nginx笔记.

安装&#xff1a; 依赖的软件包&#xff1a; gcc gcc-c autoconf automake zlib zlib-devel openssl opensll-devel pcre pcre-devel 到官方网站上下载nginx包&#xff1a; 解压: tar -zxf nginx-x.x.tar.gz 安装三步走&#xff1a;./configure------- make------make install …

English trip -- VC(情景课)10 C I like to watch TV. 我爱看电视

Grammar focus 语法点&#xff1a; like to do you do they What does he like to do? does she Practice 练习 What do they like to do&#xff1f; They like to play basketball. What does she like to do&#xff1f; She likes to swim. What does he…

数据结构——计算节点个数和二叉树高度(C语言版)

摘自&#xff1a;数据结构——计算节点个数和二叉树高度&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-12 23:27:09 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/111086664 数据结构——计算节点个数、二叉树…

写入接口c语言_PYNQ: 使用CFFI嵌入C语言

未经私信同意禁止转载&#xff01;前言CFFI是连接Python与c的桥梁&#xff0c;可实现在Python中调用c文件。CFFI为c语言的外部接口&#xff0c;在Python中使用该接口可以实现在Python中使用外部c文件的数据结构及函数。Python运行比较低&#xff0c;尤其是操作字节流的时候&…

cp命令的编写——浅谈系统调用

摘要&#xff1a;linux中cp命令的实现&#xff0c;通过这个程序&#xff0c;我们需要了解系统调用耗费时间的方面&#xff0c;同时学会系统调用的错误处理机制。 本文来源&#xff1a;http://blog.csdn.net/trochiluses/article/details/11103523 #include<stdio.h> #inc…

Unity 协程原理探究与实现

目录 一、介绍二、迭代器三、原理四、总结一、介绍 协程Coroutine在Unity中一直扮演者重要的角色。可以实现简单的计时器、将耗时的操作拆分成几个步骤分散在每一帧去运行等等&#xff0c;用起来很是方便。 但是&#xff0c;在使用的过程中有没有思考过协程是怎么实现的&#x…

数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历(C语言版)

摘自&#xff1a;数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-19 17:25:49 网址&#xff1a;https://blog.csdn.net/zhuguanlin121/article/details/118436142 无向图创建…

android 图片识别白色区域进行裁剪_【研途技能贴】| 4款好用的图片处理软件推荐...

要考研啦4款好用的图片处理软件推荐01入门级作图神器——图怪兽一款会打字就能用的在线编辑器&#xff0c;80万模板任君挑选~无论是基础的旋转裁剪&#xff0c;还是难度进阶的抠图拼图&#xff0c;在这款软件里&#xff0c;你可以分分钟做出高大上的好图&#xff01;Use tips①…

Android 开发(一)项目概况

2019独角兽企业重金招聘Python工程师标准>>> 开始写博客&#xff0c;自己是边学习边做开发&#xff0c;将自己开发的过程记录下来&#xff0c;能够对学习的知识进行梳理&#xff0c;也可以对学习做个总结。 首先是对项目的介绍&#xff1a; 做一个功能全面的软件&am…

github和dockerhub制作k8s镜像

一、前言&#xff1a; 对于初学者来说&#xff0c;k8s的镜像问题往往会将他们拦在学习门外&#xff0c;今天就白话一下k8s众多镜像的获取方式&#xff0c;前提只有一个&#xff1a;你能上百度。 二、github和dockerhub账号准备&#xff0c;这个没任何门槛&#xff0c;只要知道这…

数据结构——无向图创建邻接表以及深度遍历、广度遍历(C语言版)

摘自&#xff1a;数据结构——无向图创建邻接表以及深度遍历、广度遍历&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-22 20:55:12 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/111409503 数据结构——无向图…

python抽象类的实现_python 抽象类、抽象方法的实现

由于python 没有抽象类、接口的概念&#xff0c;所以要实现这种功能得abc.py 这个类库,具体方式如下from abc import ABCMeta, abstractmethod#抽象类class Headers(object):__metaclass__ ABCMetadef __init__(self):self.headers abstractmethoddef _getBaiduHeaders(self)…

全文检索技术介绍与使用方法

全文检索技术ElasitcSearch介绍&#xff1a;http://www.javacodegeeks.com/2013/04/getting-started-with-elasticsearch.html全文检索技术Elasticsearch的使用介绍&#xff1a;http://www.cnblogs.com/dennisit/archive/2013/04/08/3008631.htmlIBM职员对ElasticSearch的认识&…

C++轮子队-第三周(需求改进原型设计)

需求改进&原型设计 一.需求完善 &#xff08;一&#xff09;系统功能&#xff08;补充&#xff09; 图形界面&#xff08;图片如下图所示&#xff1a;&#xff09; 根据需求与组内讨论结果&#xff0c;现归纳图形界面方面需要的设计与相应功能&#xff1a; 数据-图形界面中…

Linux 从头学 01:CPU 是如何执行一条指令的?

摘自&#xff1a;Linux 从头学 01&#xff1a;CPU 是如何执行一条指令的&#xff1f; 作者&#xff1a;IOT物联网小镇 发布时间&#xff1a;2021-07-02 08:22:43 网址&#xff1a;https://blog.csdn.net/jchen1218/article/details/118404217?utm_sourceapp&app_version4.…