题目描述:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路:
是空树或者左右子树高度差不超过1,并且左右子树都是平衡二叉树。
代码:
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if (pRoot == NULL)
return true;
return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right) && abs(depth(pRoot->left) - depth(pRoot->right)) < 2;
}
int depth(TreeNode* pRoot) {
if (pRoot == NULL) return 0;
return max(depth(pRoot->left), depth(pRoot->right)) + 1;
}
};
把判断左右子树部分放到求深度的递归里:
class Solution {
bool flag = true;
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if (pRoot == NULL)
return true;
isBalanceTree(pRoot);
return flag;
}
int isBalanceTree(TreeNode* pRoot) {
if (pRoot == NULL || !flag) return 0;
int left = isBalanceTree(pRoot->left);
int right = isBalanceTree(pRoot->right);
flag = abs(right - left) < 2 ? true : false;
return max(left, right) + 1;
}
};
好长时间没刷题了。刷起来啊…