题解 | #判断是不是平衡二叉树#
判断是不是平衡二叉树
https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222
跟上一题有点类似,如果用两层递归,时间复杂度太大。看了题解才发现可以边递归计算左右子树深度边判断是否平衡。可能平时不怎么用c++,竟然忘了引用这个功能。惭愧惭愧。。。
class Solution {
public:
bool judge(TreeNode* r, int& depth) {
if (!r) return true;
int left = 0, right = 0;//左右子树的深度
if (!judge(r->left, left) ||
!judge(r->right, right))return
false; //第一种情况,子树中就有非平衡的部分
if (left - right > 1 ||
right - left > 1) return
false; //第二种情况,子树都是平衡的,但本身不平衡
depth = (left > right) ? left + 1 : right + 1;
return true;
}
bool IsBalanced_Solution(TreeNode* pRoot) {
// write code here
int depth = 0;
return judge(pRoot, depth);
}
};
查看3道真题和解析