#include<iostream>
using namespace std;
struct TreeNode
{
int val;
TreeNode * left;
TreeNode * right;
TreeNode(int x):val(x),left(NULL),right(NULL){}
};
//先序创建二叉树
void CreateBTree(TreeNode *& T)
{
int data;
cin>>data;
if(data==-1)
{
T = NULL;
return ;
}
else
{
T = new TreeNode(data);
//构造左子树
CreateBTree(T->left);
//构造右子树
CreateBTree(T->right);
}
}
class Solution
{
public:
//计算结点深度
int TreeDepth(TreeNode * T)
{
if (T == NULL)
{
return 0;
}
int nLeftDepth = TreeDepth(T->left);
int nRightDepth = TreeDepth(T->right);
return (nLeftDepth>nRightDepth)?(nLeftDepth+1):(nRightDepth+1);
}
//判断是否为平衡二叉树
bool isBanlanced(TreeNode * root)
{
if(root== NULL)
{
return true;
}
int nLeftDepth = TreeDepth(root->left);
int nRightDepth = TreeDepth(root->right);
int diff = nRightDepth-nLeftDepth;
if (diff>1 || diff<-1)
{
return false;
}
return isBanlanced(root->left)&&isBanlanced(root->right);
}
};
int main()
{
TreeNode * root;
Solution soulution;
CreateBTree(root);//创建二叉树
bool b = soulution.isBanlanced(root);//判断是否为平衡二叉树
if(b)
{
cout<<"is Banlanced Binary Tree!!"<<endl;
}
else
{
cout<<"is not Banlanced Binary Tree!!"<<endl;
}
return 0;
}
非平衡二叉树
平衡二叉树