题目
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路
- 平衡二叉树的左右子树的高度之差不超过1。
- 所以利用求二叉树深度的代码,如果对于某一个节点,它的左右子树深度差值大于一,则说明整个二叉树不是平衡二叉树。
代码
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int res = true;
int depth = getDepth( pRoot );
if ( depth == -1 )
res = false;
return res;
}
int getDepth( TreeNode* node ) {
/*计算深度,如果某一节点的左右子树高度差大于1,则逐层返回-1表示不是平衡二叉树*/
if ( node == nullptr )
return 0;
int leftDepth = getDepth( node->left );
if ( leftDepth == -1 ) return -1;
int rightDepth = getDepth( node->right );
if ( rightDepth == -1 ) return -1;
if ( abs(rightDepth - leftDepth) > 1 )
return -1;
return max( leftDepth, rightDepth ) + 1;
}
};