根据平衡二叉树的定义,每个节点的左右子树的高度差小于等于1,只需计算出二叉树左右子树高度,时同时判断左右子树的高度差即可
递归求解:(仅仅是对求树的高度进行改进)
(1)左子树高度,左子树是否是平衡树
(2)右子树高度,右子树是否是平衡树
(3)左子树与右子树高度之差是否<=1
递归求解:(仅仅是对求树的高度进行改进)
(1)左子树高度,左子树是否是平衡树
(2)右子树高度,右子树是否是平衡树
(3)左子树与右子树高度之差是否<=1
(4)返回树的高度
typedef struct Node
{
char data;
Node *lChild, *rChild, *parent;
}Node, *Tree;
int treeHight(Tree root, bool &isBalance)
{
if(root == NULL)
return 0;
int lHight = treeHight(root->lChild, isBalance);
if(!isBalance)
return 0;
int rHight = treeHight(root->rChild, isBalance);
if(!isBalance)
return 0;
int dif = lHight - rHight;
if(abs(dif) > 1)
{
isBalance = false;
return 0;
}
return max(lHight, rHight) + 1;
}