leetcode-master/problems/0110.平衡二叉树.md

1.3 KiB
Raw Blame History

题目地址

https://leetcode-cn.com/problems/balanced-binary-tree/

思路

C++代码

class Solution {
public:
    // 一开始的想法是 遍历这棵树,然后针对每个节点判断其左右子树的深度

    // 求node为头节点二叉树的深度并且比较起左右节点的高度差
    // 平衡树的条件: 左子树是平衡树右子树是平衡树左右子树高度相差不超过1。
    // 递归三部曲
    // 1. 明确终止条件如果node为null
    // 2. 明确返回信息: 判断左子树,判断右子树
    // 3. 一次递归要处理的逻辑
    int depth(TreeNode* node) {
        if (node == NULL) {
            return 0;
        }
        int left = depth(node->left);
        if (left == -1) return -1;
        int right = depth(node->right);
        if (right == -1) return -1;
        return abs(left - right) > 1 ? -1 : 1 + max(left, right);
    }
    bool isBalanced(TreeNode* root) {
        return depth(root) == -1 ? false : true;
    }
};

更多算法干货文章持续更新可以微信搜索「代码随想录」第一时间围观关注后回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等就可以获得我多年整理的学习资料。