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 函数来递归地检查每个子树是否平衡,并返回最终的判断结果;

运行结果


相关推荐
码出财富7 小时前
SpringBoot 内置的 20 个高效工具类
java·spring boot·spring cloud·java-ee
沐知全栈开发7 小时前
Perl 数据库连接
开发语言
我是小疯子667 小时前
Python变量赋值陷阱:浅拷贝VS深拷贝
java·服务器·数据库
森叶7 小时前
Java 比 Python 高性能的原因:重点在高并发方面
java·开发语言·python
二哈喇子!7 小时前
Eclipse中导入外部jar包
java·eclipse·jar
微露清风7 小时前
系统性学习C++-第二十二讲-C++11
java·c++·学习
qq_316837758 小时前
uni.chooseMedia 读取base64 或 二进制
开发语言·前端·javascript
方圆工作室8 小时前
【C语言图形学】用*号绘制完美圆的三种算法详解与实现【AI】
c语言·开发语言·算法
小二·8 小时前
Python Web 开发进阶实战:混沌工程初探 —— 主动注入故障,构建高韧性系统
开发语言·前端·python
Lkygo8 小时前
LlamaIndex使用指南
linux·开发语言·python·llama