170.二叉树:平衡二叉树(力扣)

代码解决

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */

class Solution {
public:
    // 递归计算二叉树的高度,同时检查是否平衡
    int height(TreeNode* root) {
        // 基本条件:如果节点为空,高度为0
        if (root == nullptr) return 0;

        // 递归计算左子树的高度
        int leftdeep = height(root->left);
        // 如果左子树不平衡,返回-1
        if (leftdeep == -1) return -1;

        // 递归计算右子树的高度
        int rightdeep = height(root->right);
        // 如果右子树不平衡,返回-1
        if (rightdeep == -1) return -1;

        // 如果左右子树高度差大于1,表示当前树不平衡,返回-1
        if (abs(leftdeep - rightdeep) > 1) return -1;

        // 否则返回当前树的高度,即左右子树高度的最大值加1
        return 1 + max(leftdeep, rightdeep);
    }
    
    // 判断二叉树是否平衡
    bool isBalanced(TreeNode* root) {
        // 调用height方法,如果返回值为-1,表示树不平衡,返回false
        return height(root) == -1 ? false : true;
    }
};
  • TreeNode 结构体定义

    • val:节点的整数值。
    • left:指向左子节点的指针。
    • right:指向右子节点的指针。
  • Solution 类

    • 包含两个方法:heightisBalanced
  • height 方法

    • 这是一个递归函数,用来计算二叉树的高度,并检查树是否平衡。
    • 基本条件:如果 rootnullptr,则返回高度 0。
    • 递归计算左子树和右子树的高度:
      • 如果左子树的高度为 -1,表示左子树不平衡,直接返回 -1。
      • 如果右子树的高度为 -1,表示右子树不平衡,直接返回 -1。
    • 如果左右子树的高度差超过 1,表示当前树不平衡,返回 -1。
    • 否则,返回当前树的高度,即左右子树高度的最大值加 1。
  • isBalanced 方法

    • 这个方法调用 height 方法,如果返回值为 -1,表示树不平衡,返回 false。否则,返回 true,表示树是平衡的。

相关推荐

  1. 110:平衡

    2024-06-08 19:14:06       14 阅读
  2. 0110——平衡

    2024-06-08 19:14:06       46 阅读
  3. 110.平衡

    2024-06-08 19:14:06       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-08 19:14:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-08 19:14:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-08 19:14:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-08 19:14:06       20 阅读

热门阅读

  1. C++协程

    2024-06-08 19:14:06       9 阅读
  2. 【vuejs】vm.$set() 的原理解析和方法以及应用场景

    2024-06-08 19:14:06       8 阅读
  3. 设计模式 —— 装饰器模式

    2024-06-08 19:14:06       8 阅读
  4. 深度学习-10-测试

    2024-06-08 19:14:06       8 阅读
  5. git 怎么让一个文件不提交

    2024-06-08 19:14:06       8 阅读
  6. 算法题 — 可可喜欢吃香蕉(二分查找法)

    2024-06-08 19:14:06       10 阅读
  7. PostgreSQL的内存结构

    2024-06-08 19:14:06       9 阅读
  8. git版本管理工具

    2024-06-08 19:14:06       15 阅读
  9. 动态语言的开源编译器汇总

    2024-06-08 19:14:06       10 阅读