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
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.
思路:
用树的高度来判断是否是平衡二叉树。
如果是空树,就返回0;如果是平衡二叉树,则返回树的高度,如果不是返回-1.只要有一个函数返回了-1,则整个函数都会返回-1.
#include <iostream>
using namespace std;
struct TreeNode
{
int data;
TreeNode *left;
TreeNode *right;
TreeNode(int x):data(x),left(NULL),right(NULL) {}
};
//思路。如果是空树,就返回0;如果是平衡二叉树,则返回树的高度,如果不是返回-1.只要有一个函数返回了-1,则整个函数都会返回-1.
int depth(TreeNode *root)
{
if(root == NULL) return 0;
int l = depth(root->left); //左子树的高度
int r = depth(root->right); //右子树的高度
if( l<0 || r<0 || abs(l-r)>1)
return -1;
else return 1+max(l,r); //整科树的高度。递归一次,高度加1.
}
bool isBalanced(TreeNode *root)
{
if(root == NULL) return true;
return(depth(root)>0?true:false);
}