2022.11.19
本关任务:给定一棵二叉树,计算该二叉树的深度、总节点个数和叶子节点个数。
为了完成本关任务,你需要掌握:1.二叉树深度概念,2.二叉树节点,3.二叉树叶子节点概念。

二叉树深度概念
二叉树的深度指的是二叉树中最大的结点层数。例如:图1所示的二叉树最大的节点层数为3,所以该二叉树深度为3。
二叉树节点
二叉树的节点包含一个数据元素及两个指向子树的分支,例如:图1所示的二叉树的总节点个数为6。
二叉树叶子节点概念
叶子节点是度为0的节点,二叉树节点的度为子树的个数。例如:图1所示的二叉树叶子节点为C,D和F,个数为3。
本关的编程任务是补全右侧代码片段GetTreeDepth、GetNodeNumber和GetLeafNodeNumber中Begin至End中间的代码,具体要求如下:
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是平台的测试样例:
测试输入:ABC##D##EF###
预期输出:
3
6
3
测试输入:ABCD###E#F##G##
预期输出:
4
7
3
开始你的任务吧,祝你成功!
//
// 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(deeprchild);if(deep// 请在这里补充代码,完成本关任务/********** Begin *********/if (root == NULL)return 0;elsereturn 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 **********/
}