【剑指Offer-55-II】平衡二叉树
问题
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
解答
class Solution {
public:
bool isBalanced(TreeNode* root) {
recur(root);
return res;
}
private:
bool res = 1;
int recur(TreeNode* root) {
if (!root || !res) return 0;
int left = recur(root->left);
int right = recur(root->right);
if (abs(left - right) > 1) res = 0;
return max(right, left) + 1;
}
};
重点思路
首先要搞清楚递归的输入值与返回值。递归函数的输入肯定是左右两树的深度,因为我们要通过这个深度来判断当前节点为根节点时是否为平衡二叉树,那么递归函数的输出也肯定为当前深度。递归终止条件除了到达叶节点,当前树或子树存在非平衡二叉树时也需要终止递归。这种情况下可以使用一个flag
来表示是否需要跳出递归。