题目大意:
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.
解题思路:
DFS, 递归解决.关键是: "-1"的巧用. -1表示该子树不是平衡的.
代码如下:
/**
* 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 = 0;
if(!root){
return true;
}
return (recursion(root) == -1?false:true);
}
int recursion(TreeNode* node){
int leftDepth = 0, rightDepth = 0;
if(!node->left && !node->right){
return 1;
}
if(node->left){
leftDepth = recursion(node->left);
}
if(leftDepth == -1){
return -1;
}
if(node->right){
rightDepth = recursion(node->right);
}
if(rightDepth == -1){
return -1;
}
if(abs(leftDepth - rightDepth)>1){
return -1;
}
return (max(leftDepth, rightDepth) + 1);
}
};