一、实验目的
- 了解二叉树的链式存储结构。
- 了解二叉树的相关性质。
二、实验环境
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