C语言实现计算树的深度的方法

C语言实现计算树的深度的方法

计算树的深度是树的常见操作之一,它是指从根节点到叶子节点的最长路径上的节点数。本文将介绍如何使用C语言实现计算树的深度的方法。

1. 递归法

递归法是树的常见遍历方法,计算树的深度也可以使用递归法来实现。递归法的思想是将树的每个子树的深度计算出来,然后取最大值加1,即为整棵树的深度。

具体实现方法如下:

int maxDepth(TreeNode* root) {
    if (root == NULL) {
        return 0;
    }
    int leftDepth = maxDepth(root->left);
    int rightDepth = maxDepth(root->right);
    return max(leftDepth, rightDepth) + 1;
}

解释一下代码:

  1. 如果给定的根节点指针为NULL,则返回0,因为空树的深度为0;
  2. 否则,递归计算左子树和右子树的深度,得到leftDepth和rightDepth;
  3. 将leftDepth和rightDepth中的较大值加1,即为整棵树的深度。

2. 迭代法

除了递归法,我们还可以使用迭代法来计算树的深度。迭代法的基本思路是用队列来保存每一层的节点,并对每一层的节点进行遍历。每遍历一层,深度加1。遍历完最后一层,即为整棵树的深度。

具体实现方法如下:

int maxDepth(TreeNode* root) {
    if (root == NULL) {
        return 0;
    }
    int depth = 0;
    queue<TreeNode*> q;
    q.push(root);
    while (!q.empty()) {
        depth++;
        int len = q.size();
        for (int i = 0; i < len; i++) {
            TreeNode* node = q.front();
            q.pop();
            if (node->left != NULL) {
                q.push(node->left);
            }
            if(node->right != NULL) {
                q.push(node->right);
            }
        }
    }
    return depth;
}

解释一下代码:

  1. 如果给定的根节点指针为NULL,则返回0,因为空树的深度为0;
  2. 否则,定义一个整数变量depth,用来保存树的深度;
  3. 定义一个队列q,用来保存每一层的节点;
  4. 将根节点加入队列中,并将depth加1;
  5. 当队列不为空时,循环计算每一层的节点,并遍历它们的子节点;
  6. 当遍历完当前层的所有节点后,将depth加1,指向下一层;
  7. 最后返回depth,即为整棵树的深度。

3. 示例说明

示例1

以下是一棵二叉树:

    3
   / \
  9  20
    /  \
   15   7

使用递归法计算树的深度:

int maxDepth(TreeNode* root) {
    if (root == NULL) {
        return 0;
    }
    int leftDepth = maxDepth(root->left);
    int rightDepth = maxDepth(root->right);
    return max(leftDepth, rightDepth) + 1;
}

输出结果:

3

使用迭代法计算树的深度:

int maxDepth(TreeNode* root) {
    if (root == NULL) {
        return 0;
    }
    int depth = 0;
    queue<TreeNode*> q;
    q.push(root);
    while (!q.empty()) {
        depth++;
        int len = q.size();
        for (int i = 0; i < len; i++) {
            TreeNode* node = q.front();
            q.pop();
            if (node->left != NULL) {
                q.push(node->left);
            }
            if(node->right != NULL) {
                q.push(node->right);
            }
        }
    }
    return depth;
}

输出结果:

3

示例2

以下是一棵普通树:

       1
     / | \
    2  3  4
   / \
  5   6

使用递归法计算树的深度:

int maxDepth(TreeNode* root) {
    if (root == NULL) {
        return 0;
    }
    int maxDep = 0;
    for (TreeNode* child : root->children) {
        int dep = maxDepth(child);
        if (dep > maxDep) {
            maxDep = dep;
        }
    }
    return maxDep + 1;
}

输出结果:

3

使用迭代法计算树的深度:

int maxDepth(TreeNode* root) {
    if (root == NULL) {
        return 0;
    }
    int depth = 0;
    queue<TreeNode*> q;
    q.push(root);
    while (!q.empty()) {
        depth++;
        int len = q.size();
        for (int i = 0; i < len; i++) {
            TreeNode* node = q.front();
            q.pop();
            for (TreeNode* child : node->children) {
                if (child != NULL) {
                    q.push(child);
                }
            }
        }
    }
    return depth;
}

输出结果:

3

以上就是C语言实现计算树的深度的方法的详细讲解!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现计算树的深度的方法 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Android自定义View绘制贝塞尔曲线实现流程

    下面就是对于“Android自定义View绘制贝塞尔曲线实现流程”的详细讲解,我们来分几个步骤来说明。 第一步:了解贝塞尔曲线 在绘制贝塞尔曲线前,我们需要先了解什么是贝塞尔曲线。贝塞尔曲线又称贝氏曲线,是一种数学上的曲线,利用控制点的位置来确定曲线的形状。 贝塞尔曲线由一个起点、一个终点和一个或多个控制点组成,利用这些点可以拟合出多种不同的曲线形状,例如直…

    C 2023年5月22日
    00
  • js解析json读取List中的实体对象示例

    下面是“js解析json读取List中的实体对象示例”的完整攻略。 1. 什么是 JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,常用于 Web 应用程序之间的数据传输。 JSON 数据是由键值对组成,键名必须是双引号包裹的字符串,键值可以是数字、字符串、布尔值、数组、对象等一些基本的数据类型。示例代码…

    C 2023年5月23日
    00
  • c语言中如何修改文件中间的几个字节

    要修改文件中间的某几个字节,可以采用以下步骤: 1.打开文件,获取文件句柄;2.使用fseek()函数将文件指针移动到需要修改的位置;3.使用fwrite()函数将新的字节写入文件;4.关闭文件。 下面是代码示例: #include <stdio.h> int main() { char filename[] = "test.txt&q…

    C 2023年5月23日
    00
  • C++踩坑实战之构造和析构函数

    想要了解如何正确使用C++中的构造函数和析构函数,避免在编程过程中踩坑,下面就带您一步步了解C++踩坑实战之构造和析构函数的攻略。 一、构造函数 构造函数是在对象创建时自动调用的特殊函数,负责对象的初始化工作。那么,在使用构造函数时需要注意哪些事项呢?下面以两条示例来具体说明。 1.确保类中仅存在唯一的默认构造函数 当我们定义了一个带参构造函数,C++编译器…

    C 2023年5月23日
    00
  • Win7旗舰版系统提示应用程序错误代码0xc0000409的故障原因及解决方法

    Win7旗舰版系统提示应用程序错误代码0xc0000409的故障原因及解决方法 问题表现 在 Win7 旗舰版系统中运行某些程序时,可能会遇到应用程序错误,错误代码为 0xc0000409。这时程序会崩溃或无法运行,给用户带来不便。 故障原因 应用程序错误代码 0xc0000409 通常与系统文件中的损坏或错误有关。这可能是由于电脑不正常关机或磁盘损坏等原因…

    C 2023年5月23日
    00
  • C语言 位域详解及示例代码

    C语言 位域详解及示例代码 什么是位域 在 C 语言中,结构体中的成员可以是各种类型的变量,如整型、浮点型等。我们还可以用一种叫作位域的特殊类型来定义结构体中的成员。 位域是按位存储的,它允许我们将一个字节(也就是八个二进制位)分为几个不同长度的字段,然后用这些字段来存储不同的信息。这样,我们就可以用一个变量来存储多个信息,这样节省了内存空间。 位域的声明和…

    C 2023年5月24日
    00
  • Python中使用json.load()和json.loads()加载json数据的方法实例

    下面是关于“Python中使用json.load()和json.loads()加载json数据的方法实例”的完整攻略。 什么是JSON? JSON,全称 JavaScript Object Notation,是一种轻量级的数据交换格式,是一种文本格式,可以在不同的编程语言之间进行数据交换。在 Python 中,使用 json 模块可以方便地支持 JSON 数…

    C 2023年5月23日
    00
  • DSP中浮点转定点运算–举例及编程中的心得

    DSP中浮点转定点运算–举例及编程中的心得 概述 在DSP编程中,由于DSP芯片性能限制,需要使用定点运算替代浮点运算来提升性能。本文将介绍如何将浮点数转换为定点数进行运算,并介绍一些在DSP编程中的常见定点运算技巧和心得体会。 浮点转定点运算方法 定点数格式 在进行浮点转定点运算之前,我们首先需要明确定点数的格式。假设一个32位的定点数,其中16位为整数…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部