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

相关推荐
暗恋 懒羊羊7 分钟前
Linux 生产者消费者模型
linux·开发语言·ubuntu
LN-ZMOI19 分钟前
c++学习笔记1
c++·笔记·学习
数据分析螺丝钉23 分钟前
力扣第240题“搜索二维矩阵 II”
经验分享·python·算法·leetcode·面试
no_play_no_games23 分钟前
「3.3」虫洞 Wormholes
数据结构·c++·算法·图论
五味香23 分钟前
C++学习,信号处理
android·c语言·开发语言·c++·学习·算法·信号处理
梓䈑40 分钟前
【C语言】自定义类型:结构体
c语言·开发语言·windows
PYSpring1 小时前
数据结构-LRU缓存(C语言实现)
c语言·数据结构·缓存
qq_421833671 小时前
计算机网络——应用层
笔记·计算机网络
鱼跃鹰飞1 小时前
Leecode热题100-295.数据流中的中位数
java·服务器·开发语言·前端·算法·leetcode·面试