求二叉連結串列樹高度
阿新 • • 發佈:2020-12-31
非遞迴實現
基於層序遍歷思想,使用佇列操作結點,從根節點開始入隊,出隊後判斷左右子樹,如果當前結點有左右子樹則將子樹入隊,並且判斷是否訪問到這一層最右端結點,層數加1.
void Height(BiTree T){ BiTree Q[maxsize]; //建立一個佇列儲存二叉樹型別結點 int front =0 , rear = 0; //初始化佇列的隊頭與隊尾 int last=0, level=0; //初始層數和末尾結點 if(!T){ return ; } BiTNode *p = T; //設一個指標指向T進行操作 Q[++rear] = p; //當前結點入隊 while(rear!=front){ //佇列非空狀態 p = Q[front++]; //出棧時,隊頭指標後移 if(p->lchild){ Q[++rear] = p->lchild; //子節點入隊進行遞迴 } if(p->rchild){ Q[++rear] = p->rchild; } if(rear == last){ //判斷是否訪問過入棧的結點,是則表示該層遍歷結束 level++; last = rear; } } return level; }
遞迴實現:先分別遞迴計算左、右子樹的高度,最後取最大值的層數加上根節點的層數為最終結果
int Height(BiTree){ int left_Height, right_Height; left_Height = Height(T->lchild); right_Height = Height(T->rchild); if(left_Height > right_Height){ return left_Height+1; //加一個根節點 }else{ return right_Height+1; } }