问题:判断一个二叉树是否是平衡二叉树。
分析:平衡二叉树要求左子树和右子树的高度相差为1,且左右子树都是平衡二叉树。递归可以很好的解决这个问题。但是首先要求树的深度。
代码实现:
typedef struct tree
{
int data;
struct tree* lchild,*rchild;
}BTree;
int get_tree_depth(BTree* t)
{
if (t == NULL){
return 0;
}
int ldepth,rdepth,depth;
ldepth = get_tree_depth(t->lchild) + 1;
rdepth = get_tree_depth(t->rchild) + 1;
depth = ldepth>rdepth? ldepth:rdepth;
return depth;
}
bool is_balance_tree(BTree* t)
{
int lchildDepth,rchildDepth;
if (t == NULL || (!t->rchild && !t->rchild)) // t为null或没有子树
{
return true;
}
lchildDepth = get_tree_depth(t->lchild);
rchildDepth = get_tree_depth(t->rchild);
if (abs(lchildDepth-rchildDepth) <= 1)
return i