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

相关推荐
我命由我1234534 分钟前
Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)
java·开发语言·jvm·spring boot·spring·java-ee·logback
徐小黑ACG1 小时前
GO语言 使用protobuf
开发语言·后端·golang·protobuf
0白露3 小时前
Apifox Helper 与 Swagger3 区别
开发语言
Tanecious.3 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐4 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
Tttian6225 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
独好紫罗兰6 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
zhuyixiangyyds7 小时前
day21和day22学习Pandas库
笔记·学习·pandas
每次的天空7 小时前
Android学习总结之算法篇四(字符串)
android·学习·算法
闪电麦坤957 小时前
C#:base 关键字
开发语言·c#