C语言面试题之检查二叉树平衡性

检查二叉树平衡性

实例要求

  • 1、实现一个函数,检查二叉树是否平衡;
  • 2、在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1
c 复制代码
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
    3
   / \
  9  20
    /  \
   15   7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
      1
     / \
    2   2
   / \
  3   3
 / \
4   4
返回 false 。

实例分析

  • 1、利用递归遍历二叉树的每个节点,计算其左右子树的高度差是否小于等于 1;
  • 2、如果是则继续递归地检查左右子树是否平衡,直到叶子节点或者某个节点的子树不平衡为止;
  • 3、最终返回整棵树是否平衡的结果。

示例代码

c 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


// 计算节点的高度
int height(struct TreeNode* root) {
    if (root == NULL) {
        return 0;
    }
    int left_height = height(root->left);
    int right_height = height(root->right);
    return (left_height > right_height ? left_height : right_height) + 1;
}

// 检查二叉树是否平衡的辅助函数
bool isBalancedUtil(struct TreeNode* root) {
    if (root == NULL) {
        return true;
    }
    int left_height = height(root->left);
    int right_height = height(root->right);
    if (abs(left_height - right_height) <= 1 && isBalancedUtil(root->left) && isBalancedUtil(root->right)) {
        return true;
    }
    return false;
}

// 检查二叉树是否平衡的主函数
bool isBalanced(struct TreeNode* root) {
    return isBalancedUtil(root);
}

代码解释

  • 1、height(struct TreeNode* root): 这个函数计算给定节点 root 的高度(或深度)。它通过递归地计算左子树和右子树的高度,然后返回较大的高度加上 1,表示当前节点的高度;
  • 2、isBalancedUtil(struct TreeNode* root): 这是一个辅助函数,用来检查以 root 为根的子树是否平衡。它通过递归地检查左子树和右子树的高度差是否小于等于 1,并且左子树和右子树是否也是平衡的,来判断当前子树是否平衡;
  • 3、isBalanced(struct TreeNode* root): 这是主函数,用来检查整棵二叉树是否平衡。它调用了 isBalancedUtil 函数来递归地检查每个子树是否平衡,并返回最终的判断结果;

运行结果


相关推荐
xiaoye-duck3 分钟前
C++ string 类使用超全攻略(下):修改、查找、获取及常见实用接口深度解析
开发语言·c++·stl
Coder_Boy_5 分钟前
基于SpringAI的在线考试系统-考试管理功能布局+交互优化方案
java·数据库·人工智能·spring boot·交互·ddd·tdd
Tao____12 分钟前
可以本地部署的物联网平台
java·开发语言·物联网·mqtt·低代码
码界奇点13 分钟前
基于DDD与CQRS的Java企业级应用框架设计与实现
java·开发语言·c++·毕业设计·源代码管理
柏林以东_14 分钟前
线程安全的数据集合
java·开发语言·安全
喵喵喵小鱼15 分钟前
arcgis JavaScript api实现同时展示多个撒点气泡
开发语言·javascript·arcgis
进阶的猿猴16 分钟前
java中实现markdown转为pdf
java·pdf·markdown
fengfuyao98516 分钟前
基于MATLAB的螺旋锥齿轮齿面接触分析(TCA)实现
开发语言·matlab
sunnyday042617 分钟前
Nginx与Spring Cloud Gateway QPS统计全攻略
java·spring boot·后端·nginx
海南java第二人20 分钟前
Spring Boot全局异常处理终极指南:打造优雅的API错误响应体系
java·spring boot·后端