数据结构计算二叉树的深度和节点个数

  • Post author:
  • Post category:其他


2022.11.19




任务描述

本关任务:给定一棵二叉树,计算该二叉树的深度、总节点个数和叶子节点个数。



相关知识

为了完成本关任务,你需要掌握:1.二叉树深度概念,2.二叉树节点,3.二叉树叶子节点概念。

在这里插入图片描述


二叉树深度概念


二叉树的深度指的是二叉树中最大的结点层数。例如:图1所示的二叉树最大的节点层数为3,所以该二叉树深度为3。


二叉树节点


二叉树的节点包含一个数据元素及两个指向子树的分支,例如:图1所示的二叉树的总节点个数为6。


二叉树叶子节点概念


叶子节点是度为0的节点,二叉树节点的度为子树的个数。例如:图1所示的二叉树叶子节点为C,D和F,个数为3。



编程要求

本关的编程任务是补全右侧代码片段GetTreeDepth、GetNodeNumber和GetLeafNodeNumber中Begin至End中间的代码,具体要求如下:

  1. 在GetTreeDepth中计算该二叉树的深度,返回深度值。
  2. 在GetNodeNumber中计算该二叉树的总的节点个数,返回节点个数。
  3. 在GetLeafNodeNumber中计算该二叉树的叶子节点个数,返回叶子节点个数。



测试说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是平台的测试样例:


测试输入

:ABC##D##EF###


预期输出



3

6

3


测试输入

:ABCD###E#F##G##


预期输出



4

7

3

开始你的任务吧,祝你成功!



C/C++代码

//
//  binary_tree.cpp


#include "binary_tree.h"

//创建新结点的工具函数
BTNode* getNewNode(char e)
{
    BTNode* p = (BTNode*)malloc(sizeof(BTNode));
    p->data = e;
    p->lchild = p->rchild = NULL;
    return p;
}

// 计算该二叉树的深度
// 参数:二叉树根节点root
// 返回:二叉树的深度
int GetTreeDepth(BTNode* root)
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if(!root)return 0;
    if(!root->lchild && !root->rchild)return 1;
    int deep=0;
	int deepl = GetTreeDepth(root->lchild);
    if(deep<deepl)deep=deepl;
	int deepr = GetTreeDepth(root->rchild);
    if(deep<deepr)deep=deepr;
	return deep+1;
    /********** End **********/
}

// 计算该二叉树的总节点个数
// 参数:二叉树根节点root
// 返回:二叉树的总节点个数
int GetNodeNumber(BTNode* root)
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if (root == NULL)
        return 0;
    else
        return GetNodeNumber(root->lchild) + GetNodeNumber(root->rchild) +1;
    /********** End **********/
}

// 计算该二叉树的叶子节点个数
// 参数:二叉树根节点root
// 返回:二叉树的叶子节点个数
int GetLeafNodeNumber(BTNode* root)
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if(!root)return 0;
    if(!root->lchild && !root->rchild) return 1;
    int leaf = GetLeafNodeNumber(root->lchild);
    leaf += GetLeafNodeNumber(root->rchild);
    return leaf;
    /********** End **********/
}




版权声明:本文为m0_63142359原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。