AcWing 72 平衡二叉树

题目描述:

输入一棵二叉树的根结点,判断该树是不是平衡二叉树。

如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

注意:

  • 规定空树也是一棵平衡二叉树。

样例

输入:二叉树[5,7,11,null,null,12,9,null,null,null,null]如下所示,
    5
   / \
  7  11
    /  \
   12   9

输出:true

分析:

直接修改上一题的函数,在求深度的递归函数里加上是否平衡的判断,一旦发现有结点不平衡,立刻递归返回。

/**
 * 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 ans = true;
    bool isBalanced(TreeNode* root) {
        dfs(root);
        return ans;
    }
    int dfs(TreeNode* root){
        if(!root || !ans)   return 0;
        int l = dfs(root->left),r = dfs(root->right);
        if(abs(l - r) > 1)  ans = false;
        return max(l,r) + 1;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_30277239/article/details/88556004