题解 | #判断是不是平衡二叉树#
判断是不是平衡二叉树
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; }