数据结构与算法课程笔记(七)

本文介绍了一个关于二叉树链式存储结构及其性质的实验,包括实验的目的、环境、内容及步骤。实验内容涉及完全二叉树结点数量的计算、链式存储结构的绘制、二叉树节点类型的定义等,并通过递归函数验证了二叉树的叶子节点与双分支节点的数量关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验七 二叉树的链式存储结构、性质

一、实验目的

  1. 了解二叉树的链式存储结构。
  2. 了解二叉树的相关性质。

二、实验环境

Windows 7以上版本的操作系统,Visual Studio 2010以上版本的编程环境。

三、实验内容和步骤

1.已知一棵完全二叉树的第6层(设根为第1层)有8个叶子结点,则该完全二叉树的结点个数最多是多少?最少是多少?
答:
最少:(2^5 - 1)+ 8= 31 + 8 = 39
最多:(2^6 - 1) + 48= 63 + 48 = 111

2. 根据下图所示的二叉树,画出其链式存储结构图。
在这里插入图片描述
链式存储结构图如下图所示:
在这里插入图片描述
3. 在课件目录提供的BiTree 项目中,找出定义二叉树结点类型的相关语句,理解二叉树结点的定义方法。
4. 在 content.cpp 文件中的main函数的 return 0; 语句处设置断点,调试程序,观察此二叉树在内存中的存储结构,加深理解:
在这里插入图片描述
5. 在BiTree项目的基础上,使用递归编写
计算二叉树叶子结点个数的函数:

int N0(BTNode *root);
 
//计算二叉树叶子结点个数的函数
int N0(BTNode *root)
{
	if (root == NULL)
		return 0;
	if (root->left == NULL && root->right == NULL)
		return 1;
	return N0(root->left) + N0(root->right);
}

与计算二叉树双分支结点个数的函数:

int N2(BTNode *root);

//计算二叉树双分支结点个数的函数
int N2(BTNode *root)
{	
	int n=0;
	if (root == NULL)
		return 0;
	if (root->left != NULL && root->right != NULL)
		n = 1;
	return n+ N2(root->left) + N2(root->right);
}

验证二叉树的下列性质:
非空二叉树上的叶子结点个数等于双分支结点个数加1:
即n0 = n2 + 1

答:
因为二叉树中所有结点的度数制均不大于2,所以结点总数(记为n)应等于0度结点数、1度结点(记为n1)和2度结点数(n2)之和: n=no+n1+n2 (式子1)
另一方面,1度结点有一个孩子,2度结点有两个孩子,故二叉树中孩子结点总数是: nl+2n2
树中只有根结点不是任何结点的孩子,故二叉树中的结点总数又可表示为:n=n1+2n2+1 (式子2)
由式子1和式子2得到:no=n2+1,即n0=n2+1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

青云客_Hugh

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值