从零开始学数据结构系列之第三章《二叉树链式结构及实现1》

文章目录


先导知识

二级指针


以上图形分为三层:

第一层是指针的形式:

​   共分为三级指针、二级指针、一级指针、变量

第二层是里面所存储的内容:

​   三级指针中存储的内容为二级指针的地址

​   二级指针中存储的内容为一级指针的地址

​   一级指针中存储的内容为变量的地址

​   变量中存储的内容为赋予的变量值

我们也可以根据一下代码来看

c 复制代码
#include <stdio.h>

int main(void)
{
    int x = 5;
	int *a = &x;
	int **b = &a;
	printf("%p->%p ->%d\r\n",&a,a,*a);
	printf("%p ->%p -->%d\r\n",b,*b,**b);
    return 0;
}

注意:这块一定一定要弄懂

例如啥,例如:指针,结构体这类的,不如你看不懂后面的代码的

不懂的话可以去查阅相关资料

例如可以去:
C语言相关内容
B站二级指针跳转
基于C语言指针的一些思考

或者其他地方进行一个查找

创建树

我们这边用的是链式结构

​   所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。

前序/中序/后序的递归结构遍历:是根据访问结点操作发生位置命名

NLR:前序遍历(Preorder Traversal 亦称先序遍历)------访问根结点的操作发生在遍历其左右子树之前。

LNR:中序遍历(Inorder Traversal)------访问根结点的操作发生在遍历其左右子树之中(间)。

LRN:后序遍历(Postorder Traversal)------访问根结点的操作发生在遍历其左右子树之后。

​   由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。

c 复制代码
/*
*	为什么这里要用到二级指针,因为我们所创建的值是结构体指针变量,但是我们要改变结构体指针变量中嵌套的结构体指针变得的值,
所以才需要二级指针,这样才能改变一级指针中存储的地址内容,再加上这是我们再函数中要改变函数外的值,不然他的指向都是一样的
*注意,我们是要改变一级指针中的值
*注意,我们是要改变一级指针中的值
*可以去联想之前学的,怎么改变传递进函数中的值,这个与当时哪个类似
*/
void createTree(TreeNode** T,char* temp,int* index)
{
	char ch;
	ch = temp[*index];			//防止无限递归的一种方法,直接控制index的数值间接来控制
	(*index)++;

	if(ch == '#')				//模拟输入的假设情况,因为计算机不懂什么时候是为空,需要有标志来进行判断
		*T=NULL;
	else
	{
		*T = (TreeNode*)malloc(sizeof(TreeNode));	//修改一级指针的地址,为他开辟空间
		(*T)->data = ch;							//注意,该传递的值是二级指针,并且 ->符号的优先级比*号高
		createTree(&(*T)->lchild,temp,index);		//递归左、右树,同时要注意一下这个&(*T),传递一级指针的地址
		createTree(&(*T)->rchild,temp,index);
	}
}

往期回顾

1.【第一章】《线性表与顺序表》
2.【第一章】《单链表》
3.【第一章】《单链表的介绍》
4.【第一章】《单链表的基本操作》
5.【第一章】《单链表循环》
6.【第一章】《双链表》
7.【第一章】《双链表循环》
8.【第二章】《栈》
9.【第二章】《队》
10.【第二章】《字符串暴力匹配》
11.【第二章】《字符串kmp匹配》
12.【第三章】《树的基础概念》
13.【第三章】《二叉树的存储结构》

相关推荐
say_fall9 分钟前
精通C语言(4.四种动态内存有关函数)
c语言·开发语言
知识分享小能手14 分钟前
微信小程序入门学习教程,从入门到精通,电影之家小程序项目知识点详解 (17)
前端·javascript·学习·微信小程序·小程序·前端框架·vue
暴力求解20 分钟前
c++类和对象(下)
开发语言·c++·算法
特种加菲猫23 分钟前
网络协议分层:解密TCP/IP五层模型
linux·网络·笔记
风和先行28 分钟前
Android Vibrator学习记录
学习
应用市场34 分钟前
Qt插件机制实现动态组件加载详解
开发语言·qt
小秋学嵌入式-不读研版36 分钟前
C65-枚举类型
c语言·开发语言·笔记
艾莉丝努力练剑1 小时前
【Linux指令 (二)】不止于入门:探索Linux系统核心与指令的深层逻辑,理解Linux系统理论核心概念与基础指令
linux·服务器·数据结构·c++·centos
三三木木七1 小时前
AI超级智能体学习笔记
笔记·学习
长桥夜波1 小时前
【第十七周】机器学习笔记06
人工智能·笔记·机器学习