//输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过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 。
//
//
//
// 限制:
//
//
// 0 <= 树的结点个数 <= 10000
//
//
// 注意:本题与主站 110 题相同:https://leetcode-cn.com/problems/balanced-binary-tree/
//
//
// Related Topics 树 深度优先搜索
// 👍 114 👎 0
/*
* 剑指 Offer 55 - II 平衡二叉树
* 2021-02-18 11:44:55
* @author oxygenbytes
*/
#include "leetcode.h"
//leetcode submit region begin(Prohibit modification and deletion)
/**
* 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) {
if(!root) return true;
return isBalanced(root->left) && isBalanced(root->right) && abs(bfs(root->right) - bfs(root->left)) < 2;
}
int bfs(TreeNode* root){
if(!root) return 0;
return max(bfs(root->left), bfs(root->right)) + 1;
}
};
//leetcode submit region end(Prohibit modification and deletion)