判断一颗二叉树是否是平衡二叉树
附一个代码的github链接:
平衡二叉树判断的c++代码
刚刚开始整理,后面会不断完善的哈!
首先先明确平衡二叉树的性质:
1、左子树深度与右子树深度差不大于1;
2、左右子树都是平衡二叉树;
根据两条性质,判断是否为平衡二叉树的关键是:
1、计算树的深度
2、递归
下面贴出代码:
#include <iostream>
/*调用深度计算函数,且计算树深度时,若为-1说明子树不平衡,
直接返回-1即可*/
bool IsBalanced_Solution(TreeNode* pRoot) {
return getdepth(pRoot)!=-1;
}
int getdepth(TreeNode* pRoot){
if(pRoot == NULL)//递归终止条件
return 0;
int left = getdepth(pRoot->left);//递归计算左子树深度
if(left == -1)
return left;
int right = getdepth(pRoot->right);//递归计算右子树深度
if(right == -1)
return right;
int ret = (abs(left-right)>1 ? -1:1+max(left,right));//返回当前树深度
return ret;
}