非递归(借助层序遍历队列)
//使用非递归算法实现求二叉树的高度
//我们可以采用层序遍历的方式(使用顺序存储结构),设置一个last指针指向每层的最后一个节点指针,当出队时比较出队指针和last指针,若相同那么level+1
int Hight(BiTree T){
BiTree p = T;
BiTree Queue[MAXSIZE];
int front = -1, rear = -1;
int level = 0, last = 0;
Queue[++rear] = p//根节点入队
while(front<rear){
Queue[++front] = p;//出队
if(p->left!=NULL){
Queue[++rear] = p->left;
}
if(p->right!=NULL){
Queue[++rear] = p->right;
}
if(front==last){
level++;
last = rear;
}
}
return level;
}
递归实现
//递归实现,根据树的高度等于max(h左,h右)+1
int Hight2(BiTree T){
int h1 = 0, h2 = 0;
BiTree p = T;
if(p == NULL){
return 0;
}
else{
h1 = Hight2(p->left);
h2 = Hight2(p->right);
return (h1>h2?h1:h2)+1;
}
}