题目源自于leetcode。
题目: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.
思路:
题目给出的函数接口只有bool类型返回值。这不足以递归的判断是否平衡。因为整个树平衡与否,不仅仅是要(1)看左、右子树是否各自都是平衡的,而且还要(2)看左、右子树的高度之差是否超过1。
所以又写了一个函数以高度作为返回值。每次递归都即判断高度差又计算树高。为了加快递归速度,一旦发现高度差超过1,就将高度置为-1,高度出现-1之后,就回一路返回到递归最外层。
这里的返回值就既代表平衡状态值,又代表高度。当返回值是-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) {
if(depth(root) == -1)
return false;
else
return true;
}
int depth(TreeNode *root)
{
if(root == NULL)
return 0;
int left = depth(root->left);
int right = depth(root->right);
if (left == -1 || right == -1)
return -1;
else
{
if(abs(left - right) > 1)
return -1;
else
return (left>right?left:right) + 1;
}
}
};