// 平衡二叉树_判断是否是平衡二叉树.cpp : 定义控制台应用程序的入口点。
//题目描述:判断一棵树是否是平衡二叉树
// 思路:求得每个节点的高度,递归的进行子树判断看是否是平衡二叉树
#include "stdafx.h"
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int max(int x, int y) {
return x > y ? x : y;
}
int abs(int a) {
return a < 0 ? -a : a;
}
int TreeHeight(TreeNode *current) {
if (current == NULL)
return 0;
int height_left, height_right;
height_left = TreeHeight(current->left) + 1;
height_right = TreeHeight(current->right) + 1;
return max(height_left, height_right);
}
bool IsBalanced_Solution(TreeNode* pRoot) {
if (pRoot == NULL)
return true;
int flag = IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right);
if (abs(TreeHeight(pRoot->left) - TreeHeight(pRoot->right)) < 2)
flag = flag && true;
else
return false;
return flag;
}