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


    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 **********/
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
  • 相关阅读:
    Android 9.0 framework中开机启动的过程中监听launcher是否启动完成的源码分析
    kubeadm init命令时报错(关键词-无法加载)
    【毕业设计】基于STM32的天气预报盒子 - 嵌入式 单片机 物联网
    Oracle/PLSQL: Round Function (with numbers)
    测试员有必要转测试开发吗?
    数据结构 --- JAVA版链表
    Linux常用命令分类整理
    这个 MySQL 问题困扰了我一个月,现在终于把他解决了
    一文教你搞懂Redis集群
    ggplot2图形简单绘制
  • 原文地址:https://blog.csdn.net/m0_63142359/article/details/127930986