您的位置:首页 > 游戏 > 游戏 > 建设银行网站是多少_莱芜网络推广公司哪里找_国家市场监管总局官网_新闻热点事件

建设银行网站是多少_莱芜网络推广公司哪里找_国家市场监管总局官网_新闻热点事件

2025/7/10 10:36:59 来源:https://blog.csdn.net/qq_39178993/article/details/143267599  浏览:    关键词:建设银行网站是多少_莱芜网络推广公司哪里找_国家市场监管总局官网_新闻热点事件
建设银行网站是多少_莱芜网络推广公司哪里找_国家市场监管总局官网_新闻热点事件

1. 理解问题

        我们需要设计一个算法来计算给定二叉树的高度。二叉树的高度是指从根节点到最远叶子节点的最长路径上的节点数。如果树为空,则高度为 0;如果只有根节点,则高度为 1。

示例:

假设我们有如下的二叉树:

        5
       / \
     3   7
    / \   / \
   2 4 6  8
这棵树的高度为 3,因为从根节点 5 到叶子节点(如 2 或 4)的最长路径包含 3 个节点(5 → 3 → 2)。

2. 输入输出

输入:

  • root:指向二叉树根节点的指针,表示二叉树的起始节点。

输出:

  • 返回值:返回二叉树的高度。

3. 二叉树结构

二叉树节点的定义如下:

struct TreeNode {
    int data;               // 节点的值
    struct TreeNode* left;  // 指向左子节点的指针
    struct TreeNode* right; // 指向右子节点的指针
};

4. 制定策略

为实现计算二叉树高度的算法,我们可以使用递归方式遍历树。在遍历过程中,计算左子树和右子树的高度,取较大值并加 1 作为当前节点的高度。

关键步骤:

  • 递归遍历:从根节点开始递归遍历二叉树,计算左右子树的高度。
  • 返回高度:返回左右子树高度的最大值加 1。

5. 实现代码

5.1 关键函数实现

// 查找二叉树的高度
int calculateHeight(struct TreeNode* root) {
    // 如果树为空,返回 0
    if (root == NULL) return 0;
    
    // 递归计算左子树和右子树的高度
    int leftHeight = calculateHeight(root->left);
    int rightHeight = calculateHeight(root->right);
    
    // 返回较大值加 1
    return (leftHeight > rightHeight ? leftHeight : rightHeight) + 1;
}


5.2 完整 C 代码

#include <stdio.h>
#include <stdlib.h>

// 定义二叉树节点结构
struct TreeNode {
    int data;                   // 节点的数据
    struct TreeNode* left;      // 指向左子节点的指针
    struct TreeNode* right;     // 指向右子节点的指针
};

// 创建一个新节点
struct TreeNode* createNode(int data) {
    struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));  // 分配内存给新节点
    newNode->data = data;        // 设置节点的数据
    newNode->left = NULL;        // 初始化左子节点为 NULL
    newNode->right = NULL;       // 初始化右子节点为 NULL
    return newNode;              // 返回新节点
}

// 查找二叉树的高度
int calculateHeight(struct TreeNode* root) {
    if (root == NULL) return 0;
    int leftHeight = calculateHeight(root->left);
    int rightHeight = calculateHeight(root->right);
    return (leftHeight > rightHeight ? leftHeight : rightHeight) + 1;
}

// 主函数
int main() {
    // 创建二叉树的节点
    struct TreeNode* root = createNode(5);
    root->left = createNode(3);
    root->right = createNode(7);
    root->left->left = createNode(2);
    root->left->right = createNode(4);
    root->right->left = createNode(6);
    root->right->right = createNode(8);

    // 计算二叉树的高度
    int height = calculateHeight(root);
    printf("二叉树的高度是: %d\n", height);

    return 0;
}
 

5.3 代码说明

calculateHeight(struct TreeNode* root):计算二叉树的高度。

  • 如果当前节点为空,返回 0。
  • 递归计算左子树和右子树的高度。
  • 返回较大值加 1。

6. 运行结果

        对于上述示例,运行结果为:二叉树的高度是: 3

7. 时间和空间复杂度分析

  • 时间复杂度:O(n),最坏情况下需要遍历所有节点。
  • 空间复杂度:O(h),递归调用栈的深度最多为树的高度 h。

8. 总结

        通过递归遍历二叉树,可以有效地计算其高度。这种方法简单且易于理解,对于深度优先搜索等其他操作也具有一定的实用性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com