/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
*
* @param pRoot TreeNode类
* @return bool布尔型
*/
//方法:双重递归问题(一个获得深度的递归函数,一个遍历判断是否为平衡二叉树的主函数),递归结束条件为空树
//1、局部函数(获得深度的递归函数),跳出递归条件是:节点为NULL
//(1)判空树,,返回0
//(2)定义深度变量depth
//(3)定义左右子树的深度lDepth,rDepth,并重复嵌套递归各自子树的深度
//(4)三目运算符判断左右子树的高度,选择子树高的自增1,赋值给depth
//2、主函数(遍历判断是否为平衡二叉树,递归结束的条件:空树和sub绝对值大于1 )
//(1)判空树,返回1(是二叉树)
//(2)定义左右子树深度变量lDepth,rDepth,调用获得深度函数来各自赋值
//(3)定义变量sub用于存储,深度变量lDepth和rDepth的差
//(4)判断sub就绝对值abs大于1,返回0;否则进行下一步
//(5)递归判断每一个节点
//1、局部函数(获得深度的递归函数),跳出递归条件是:节点为NULL
int getDepth(struct TreeNode *Root)
{
//(1)判空树,,返回0
if(!Root)
{
return 0;
}
//(2)定义深度变量depth
int depth = 0;
//(3)定义左右子树的深度lDepth,rDepth,并重复嵌套递归各自子树的深度
int lDepth = getDepth(Root->left);
int rDepth = getDepth(Root->right);
//(4)三目运算符判断左右子树的高度,选择子树高的自增1,赋值给depth
depth = lDepth>rDepth?lDepth+1:rDepth+1;
return depth;
}
bool IsBalanced_Solution(struct TreeNode* pRoot )
{
// write code here
//主函数(遍历判断是否为平衡二叉树,递归结束的条件:空树和sub绝对值大于1 )
//(1)判空树,返回1(是二叉树)
if(!pRoot)
{
return 1;
}
//(2)定义左右子树深度变量lDepth,rDepth,调用获得深度函数来各自赋值
int lDepth = getDepth(pRoot->left);
int rDepth = getDepth(pRoot->right);
//(3)定义变量sub用于存储,深度变量lDepth和rDepth的差
int sub = lDepth - rDepth;
//(4)判断sub就绝对值abs大于1,返回0;否则进行下一步
if(abs(sub)>1)
{
return 0;
}
//(5)递归判断每一个节点
return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right);
}