链式二叉树的基本操作(C语言实现)

本文详细介绍链式二叉树的创建过程,包括节点结构定义、节点创建与链接。此外,深入探讨树的深度与层序遍历方法,并提供实用代码示例。最后,讲解如何实现树的基本功能如节点计数、查找等。

目录

一、链式二叉树的创建

1.1 定义节点结构

1.2 节点的创建

1.3 节点的链接

二、树的深度遍历

1. 前序、中序、后序遍历

1.2 三种方式的遍历顺序图

2. 代码实现

3. 遍历检测

三、树的层序遍历

3.1 层序遍历

3.2 完全二叉树的鉴定

四、树的基本功能

4.1 树中节点的个数

4.2 树中叶子节点的数量

4.3 第k层节点的数量

4.4 查找树的节点

4.5 树的深度

4.6 树的销毁


本篇博客学习的是最普通的链式二叉树,这个结构在实际应用的中的作用并不是很大,但是我们仍要学习这个结构。学习这个结构的目的是为了以后我们研究更复杂的树型结构打下基础。废话不多说,直接开始。

目录

一、链式二叉树的创建

1.1 定义节点结构

1.2 节点的创建

1.3 节点的链接

二、树的深度遍历

2.1 前序、中序、后序遍历

2.1.1 三种方式的遍历顺序图

2.1.2 代码实现

2.1.3 遍历检测

三、树的基本功能

3.1 树中节点的个数

3.2 树中叶子节点的数量

3.3 第k层节点的数量

3.4 查找树的节点

3.5 树的深度

3.6 树的销毁

四、树的层序遍历

4.1 层序遍历

4.2 完全二叉树的鉴定


一、链式二叉树的创建

首先我们来创建一颗树,创建一棵树分为以下三个步骤:①定义树中结点的结构②创建新结点③将结点链接起来;这样就可以一个树就被建立了起来。

1.1 定义节点结构

//节点的创建
typedef int BTDataType;
typedef struct BinaryTreeNode
{
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
	BTDataType data;
}BTNode;

1.2 节点的创建

BTNode* BuyNode(BTDataType x)
{
	BTNode* node = (BTNode*)malloc(sizeof(BTNode));
	assert(node);
	node->data = x;
	node->left = NULL;
	node->right = NULL;
	return node;
}

1.3 节点的链接

BTNode* CreatBinaryTree()
{
	BTNode* node1 = BuyNode(1);
	BTNode* node2 = BuyNode(2);
	BTNode* node3 = BuyNode(3);
	BTNode* node4 = BuyNode(4);
	BTNode* node5 = BuyNode(5);
	BTNode* node6 = BuyNode(6);
	//链接
	node1->left = node2; //         1 
	node1->right = node4;//     2       4
	node2->left = node3;//   3   #    5    6
	node4->left = node5;// # #       # #  # #
	node4->right = node6;
	return node1;
}

二、树的深度遍历

树我们是创建好了,接下来我们来观察一下我们树的链接情况,此时就要遍历一遍树。但是树的结构特殊,不同于我们之前学的数组,遍历起来很方便。于是引申出以下几种遍历方式。

1. 前序、中序、后序遍历

三种方式的访问顺序

前序——( 根 --> 左子树 --> 右子树)

中序——( 左子树 --> 根 --> 右子树)

后序——( 左子树 --> 右子树 --> 根)

1.2 三种方式的遍历顺序图

 

 

2. 代码实现

这遍历规律性强,我们使用递归可以很容易的写出来,并将每个为NULL的位置打印一个#作为代替。

前序遍历

//前序遍历
void PreOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("# ");
		return;
	}
	printf("%d ", root->data);
	PreOrder(root->left);
	PreOrder(root->right);
}

中序遍历

//中序遍历
void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("# ");
		return;
	}
	InOrder(root->left
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brant_zero2022

素材免费分享不求打赏,只求关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值