Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
判断一个二叉树是不是平衡二叉树,如果二叉树的每个节点的左右子树的深度相差不超过1,此二叉树为平衡二叉树。
思路,二叉树root为平衡二叉树的条件是,它的左右子树为平衡二叉树,左右子树的深度差不超过1,因此首先递归判断左右子树是否平衡,同时在递归过程中通过引用传参的方式传递回左右子树的深度,然后再根据左右子树的深度做出整体判断。
AC code:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isBalanced(TreeNode *root)
{
int depth;
return helper(root,depth);
}
bool helper(TreeNode *root,int &depth)
{
if(root==NULL)
{
depth=0;
return true;
}
int leftDepth,rightDepth;
bool b1,b2;
if(!helper(root->left,leftDepth))
return false;
if(!helper(root->right,rightDepth))
return false;
if(abs(rightDepth-leftDepth)>1)
return false;
else
{
depth=rightDepth>leftDepth?rightDepth+1:leftDepth+1;
return true;
}
}
};