LeetCode 110

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

难度:简单

这道题对 LeetCode 104 二叉树的最大深度 稍加改造,当求出左右子树的深度时,如果深度差超过 1,则返回 -1,父节点如果接收到 -1,也直接返回 -1,否则返回当前子树的深度。最后判断根节点得到的深度是否为 -1。

时间复杂度:O(n),其中 n 为二叉树的节点个数。

空间复杂度:O(n)。最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。

class Solution {
public:
    bool isBalanced(TreeNode* root) {
        auto dfs = [&](auto &&dfs, TreeNode* node) -> int {
            if (node == nullptr) {
                return 0;
            }
            int left = dfs(dfs, node->left);
            int right = dfs(dfs, node->right);
            if (left == -1 || right == -1 || abs(left - right) > 1) {
                return -1;
            }
            return max(left, right) + 1;
        };

        return dfs(dfs, root) != -1;
    }
};