6.37③ 試直接利用棧的基本操作寫出先序遍曆的非遞迴 形式的演算法_廣工

來源:互聯網
上載者:User
6.37③ 試直接利用棧的基本操作寫出先序遍曆的非遞迴
形式的演算法(提示:不必按3.3.2節介紹的從遞迴到非遞迴
的方法而直接寫出非遞迴演算法)。


要求實現下列函數:
void PreOrder(BiTree bt, void (*visit)(TElemType)); 
/* 使用棧,非遞迴先序遍曆二叉樹bt,    */
/* 對每個結點的元素域data調用函數visit */


二叉鏈表類型定義:
typedef struct BiTNode {
    TElemType data;
    BiTNode  *lchild,*rchild;
} BiTNode, *BiTree;


可用棧類型Stack的相關定義:
typedef BiTree SElemType;      // 棧的元素類型


Status InitStack(Stack &S); 
Status StackEmpty(Stack S); 
Status Push(Stack &S, SElemType e);
Status Pop(Stack &S, SElemType &e); 

Status GetTop(Stack S, SElemType &e); 


void PreOrder(BiTree bt, void (*visit)(TElemType)) 
/* 使用棧,非遞迴先序遍曆二叉樹bt,    */
/* 對每個結點的元素域data調用函數visit */
{
    //把結點壓入棧中是為了方便訪問結點的右結點
    BiTree p = bt;
    Stack s;    
    InitStack(s);
    while(p || !StackEmpty(s)){
        if(p){
            visit(p->data);
            Push(s, p);
            p = p->lchild;
        }else{
            Pop(s, p);
            p = p->rchild;
        }                 
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.