Leetcode-- II. 平衡二叉树

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

示例 1:

给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7
返回 true 。

示例 2:

给定二叉树 [1,2,2,3,3,null,null,4,4]

       1
      / \
     2   2
    / \
   3   3
  / \
 4   4
返回 false 。

限制:

1 <= 树的结点个数 <= 10000

思路

 直接递归遍历二叉树,

如果可以找到左右子树深度超过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 result= true;
    int check(TreeNode* root){
        // 如果遍历完子树或已经判断不是平衡二叉树则返回
        if(!root|| !result) return 0;

        int left= check(root->left);
        int right= check(root->right);

        // 左右子树深度超过1
        if(fabs(left- right)> 1) result= false; 
        // 深度往上传递
        return left> right? left+ 1: right+ 1;
    }
    bool isBalanced(TreeNode* root) {
        check(root);
        return result;
    }
};
发布了208 篇原创文章 · 获赞 28 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_41879093/article/details/105308499
今日推荐