题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
代码
需要遍历结点多次的解法。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if (pRoot == NULL) {
return true;
}
int leftDepth = TreeDepth(pRoot->left);
int rightDepth = TreeDepth(pRoot->right);
int diff = leftDepth - rightDepth;
if (diff > 1 || diff < -1) {
return false;
}
return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right);
}
int TreeDepth(TreeNode *pRoot){
if (pRoot == NULL) {
return 0;
}
int leftDepth = TreeDepth(pRoot->left);
int rightDepth = TreeDepth(pRoot->right);
return (leftDepth > rightDepth) ? (leftDepth + 1): (rightDepth + 1);
}
};
每个结点只遍历一次的解法
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth = 0;
return Is_Balanced(pRoot, &depth);
}
bool Is_Balanced(TreeNode *pRoot, int *pDepth){
if (pRoot == NULL) {
*pDepth = 0;
return true;
}
int left,right;
if (Is_Balanced(pRoot->left, &left) && Is_Balanced(pRoot->right, &right)) {
int diff = left - right;
if (diff <= 1 && diff >= -1) {
*pDepth = 1 + ((left > right) ? left : right);
return true;
}
}
return false;
}
};