递归思路:
- 空树一定为平衡二叉树
- 一棵树是平衡二叉树,首先需要它的左右子树都是平衡二叉树,这点可以用返回值bool来递归解决
- 一棵树是平衡二叉树,其次需要它自己左右子树的高度差不超过1,这点不能用bool来解决,所以考虑将返回值改成pair<bool, int>,bool存储是否为平衡二叉树,而int存储该二叉树的高度。
- 按照上面两个条件由左右子树的返回值计算该树的返回值。
class Solution {
public:
pair<bool, int> IsBalanced_Solution2(TreeNode* pRoot) {
if (!pRoot) return make_pair(true, 0);
auto l = IsBalanced_Solution2(pRoot->left), r = IsBalanced_Solution2(pRoot->right);
return make_pair(l.first && r.first && abs(l.second - r.second) <= 1, max(l.second, r.second) + 1);
}
bool IsBalanced_Solution(TreeNode* pRoot) {
return IsBalanced_Solution2(pRoot).first;
}
};

京公网安备 11010502036488号