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.
C++版本1:
#include <iostream>
#include <vector>
#include <stdlib.h>
using namespace std;
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x):val(x),right(NULL),left(NULL){}
};
class Solution{
private:
bool balanced=true;
int height(TreeNode *root){
if(!balanced){
return -1;
}
if(root==NULL){
return 0;
}
int leftH,rightH;
leftH=height(root->left)+1;
rightH=height(root->right)+1;
if(abs(leftH-rightH)>1){
balanced=false;
}
return leftH>rightH?leftH:rightH;
}
bool isBalanced(TreeNode *root){
balanced=true;
height(root);
return balanced;
}
};
int main()
{
cout << "Hello world!" << endl;
return 0;
}
c++版本2:
/**
* 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 checkBalance(TreeNode *node, int &dep)
{
if (node == NULL)
{
dep = 0;
return true;
}
int leftDep, rightDep;
bool leftBalance = checkBalance(node->left, leftDep);
bool rightBalance = checkBalance(node->right, rightDep);
dep = max(leftDep, rightDep)+1;
return leftBalance && rightBalance && (abs(rightDep - leftDep) <= 1);
}
bool isBalanced(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int dep;
return checkBalance(root, dep);
}
};
Java版本:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isBalanced(TreeNode root) {
if (root == null)
return true;
if (getHeight(root) == -1)
return false;
return true;
}
public int getHeight(TreeNode root) {
if (root == null)
return 0;
int left = getHeight(root.left);
int right = getHeight(root.right);
if (left == -1 || right == -1)
return -1;
if (Math.abs(left - right) > 1) {
return -1;
}
return Math.max(left, right) + 1;
}
}
原文:http://www.cnblogs.com/zlz-ling/p/4042600.html