天天看點

層序周遊求二叉樹(鍊式存儲結構)的高度

int Btdepth(Bitreee T){
    if(!T)
        return 0;                           //如果是空樹,則高度為1;
    int front =-1,rear=-1;                  //定義順序隊列,隊列元素是二叉樹結點指針,用于層序通路鍊式二叉樹;
    BiTree Q[MaxSize];

    int last=0,level=0;                     //last表示目前層的最右節點在隊列中的序号。level用于計算數地高度。
    Q[++rear]=T;                            //根節點進隊
    BiTree p;
    while(front<rear){                      //隊不空
        p=Q[++front];                       //出隊
        if(p->lchild)                       //左右孩子入隊
            Q[++rear]=p->lchild;
        if(p->rchild)
            Q[++rear]=p->rchild;
        if(front==last){                    //當出隊到最右節點時,目前層次周遊完成,高度+1。更新新的最右節點的位置
            level++;
            last=rear;
        }
    }
    return level;
}
           

思路:

二叉樹的高度等于層數,要求層數,隻需找到每層最右節點的個數。

當隊頭指針=最右節點時,更新最右節點。因為此時隊列中正好剛剛将下一層的所有結點都周遊了,此時的隊尾結點就是要更新的最右節點。

循環結束條件同層序周遊結束條件,隊空時跳出循環

408

繼續閱讀