从零开始学数据结构系列之第三章《二叉树链式结构及实现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.【第三章】《二叉树的存储结构》

相关推荐
颜如玉3 分钟前
Redis scan高位进位加法机制浅析
redis·后端·开源
ReedFoley15 分钟前
【笔记】动手学Ollama 第七章 应用案例1 搭建本地AI Copilot编程助手
人工智能·笔记·copilot
长安即是故里1 小时前
Maxwell学习笔记
笔记·学习
yueyuebaobaoxinx2 小时前
MATLAB 与 Simulink 联合仿真:控制系统建模与动态性能优化
开发语言·matlab·性能优化
我要学习别拦我~2 小时前
读《精益数据分析》:精益画布——创业与产品创新的高效工具
经验分享·数据分析
小莞尔3 小时前
【51单片机】【protues仿真】基于51单片机宠物投食器系统
c语言·stm32·单片机·嵌入式硬件·51单片机·proteus
躲着人群3 小时前
次短路&&P2865 [USACO06NOV] Roadblocks G题解
c语言·数据结构·c++·算法·dijkstra·次短路
superlls3 小时前
(计算机网络)JWT三部分及 Signature 作用
java·开发语言·计算机网络
★YUI★3 小时前
学习制作记录(选项UI以及存档系统)8.24
学习·游戏·ui·unity·c#
咸甜适中3 小时前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十四)垂直滚动条
笔记·学习·rust·egui