思路:非递归则需要利用层序遍历思想,记录层数。每从队列中出满一队节点,则高度+1。设置变量记录队列长度与新入队元素的数量,当队列长度与新入队元素数量相等时,表明队列中上一层节点已经全部出队,此时队列中的节点全部为同一层节点。
int findTreeHight(BiTree T){
Queue que; //创建队列
que = InitQueue();
BiTree t;
t = T;
PushQueue(&que,t);
int h = 0; //记录高度
int child = 0;
while(!IsEmptyQueue(que)){
if(t->LChild){
PushQueue(&que,t->LChild);
child++;
}
if(t->RChild){
PushQueue(&que,t->RChild); //入队
child++;
}
PopQueue(&que,&t); //对头出队
if(child == que.len){ //len为队列中元素个数
h++;
child = 0;
}
}
return h;
}