题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路:后序遍历,在遍历一个节点之前就已经遍历了它的左、右子树,只要在遍历每个节点是记录它的深度(某一节点的深度等于它到叶节点的路径的长度),我们就可以一边遍历,一边判断每个节点是不是平衡的。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot, int* pDepth){
if(pRoot == nullptr){
*pDepth = 0;
return true;
}
int left, right;
if(IsBalanced_Solution(pRoot->left, &left) && IsBalanced_Solution(pRoot->right, &right)){
int diff = left - right;
if(diff <= 1 && diff >= -1){
*pDepth = left > right ? left + 1 : right + 1;
return true;
}
}
return false;
}
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth = 0;
return IsBalanced_Solution(pRoot, &depth);
}
};