题解 | #判断是不是平衡二叉树#
判断是不是平衡二叉树
https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/*
思路:
不为空:
leftnum=计算当前节点的左孩子的深度(num函数)
rightnum=计算当前节点的右孩子的深度(num函数)
if(leftnum-rightnum!=1||leftnum==rightnum)//不满足
return false
使用递归处理子树的子树是不是平衡树
return ture
错误总结:
尽管想到了可以使用深度去进行比较,但是当处理子树的子树是不是平衡树时候,没有很好的利用递归去处理。
*/
#include <stdbool.h>
int leftnum=0,rightnum=0;
int num(struct TreeNode* pRoot)
{
if(pRoot==NULL)return 0;
leftnum=num(pRoot->left);
rightnum=num(pRoot->right);
if(leftnum>rightnum)
{
leftnum+=1;
return leftnum;
}
else
{
rightnum+=1;
return rightnum;
}
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return bool布尔型
*/
bool IsBalanced_Solution(struct TreeNode* pRoot ) {
// write code here
if(pRoot!=NULL){
int res=num(pRoot->left)-num(pRoot->right);
if(res>1 || res<-1)
return false;
if(IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right))
return true;
else
return false;;
}
return true;
}


查看7道真题和解析