输入一棵二叉树,判断该二叉树是否是平衡二叉树。
平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
本题可以视为上题的进阶版,同样用递归方式做。
class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot==NULL) return true; int ldep=0,rdep=0; if(pRoot->left!=NULL) ldep=TreeDepth(pRoot->left); if(pRoot->right!=NULL) rdep=TreeDepth(pRoot->right); bool thist=(ldep>=rdep-1&&ldep<=rdep+1)? true:false; return thist&&IsBalanced_Solution(pRoot->left)&&IsBalanced_Solution(pRoot->right);//如果此节点以及左右子节点均为平衡节点,则返回true } int TreeDepth(TreeNode* pRoot) //返回这个节点的深度 { int leftdep=1,rightdep=1; if(pRoot==NULL) return 0; if(pRoot->left!=NULL) { leftdep+=TreeDepth(pRoot->left); } if(pRoot->right!=NULL) { rightdep+=TreeDepth(pRoot->right); } return (leftdep>rightdep)? leftdep:rightdep; } };