0
点赞
收藏
分享

微信扫一扫

剑指 Offer 55 - II. 平衡二叉树

凌得涂 2022-04-14 阅读 34
leetcode

问题概述:如何快速判断是否平衡二叉树?

解决方法:中序遍历+剪枝

1.用-1标记非平衡二叉树。遍历左子树,若发现子树为非平衡二叉树,返回-1,则不用遍历右子树,右子树同理。

2.若左右子树都符合平衡二叉树,则比较两者深度,不符合返回-1;

代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isBalanced(TreeNode* root) {
        return dfs(root) == -1 ? false : true;
    }

    int dfs(TreeNode* root){
        if(root == NULL) return 0;

        int left = dfs(root -> left);
        if(left == -1) return -1;

        int right = dfs(root -> right);
        if(right == -1) return -1;

        return abs(left - right) < 2 ? max(left, right) + 1 : -1;
    }
};

举报

相关推荐

0 条评论