输入一棵二叉树的根结点,判断该树是不是平衡二叉树。
如果某二叉树中任意结点的左右子树的深度相差不超过 1
,那么它就是一棵平衡二叉树。
注意:
数据范围
树中节点数量 [0,500]
。
样例
1 2 3 4 5 6 7 8
| 输入:二叉树[5,7,11,null,null,12,9,null,null,null,null]如下所示, 5 / \ 7 11 / \ 12 9
输出:true
|
算法思路
在统计二叉树的深度的代码基础上,实时判断当前节点的左右子树的深度差是否大于1,如果是则不是平衡二叉树
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
class Solution { public: bool res = true;
int dfs(TreeNode * root){ if(!root) return 0; int left = dfs(root -> left); int right = dfs(root -> right); if(abs(left - right) > 1) res = false;
return max(left, right) + 1; }
bool isBalanced(TreeNode* root) { dfs(root); return res; } };
|