1. 程式人生 > >二叉樹中序遍歷非遞歸寫法

二叉樹中序遍歷非遞歸寫法

sqs nor amp style mage 中序遍歷 遞歸 ack stack

中序遍歷比前序要稍微復雜些,我也先用手寫理出思路

技術分享圖片

代碼寫的和書上的一比。。。感覺麻煩了好多,但畢竟是自己理的思路不容易忘,所以還是貼自己的

void inOrder_stack(BiTree T){
    printf("\n非遞歸中序遍歷結果:\n");
    initStack(&sqStack);
    BiTree p=T,l;//l用於保存上次的輸出
    push(&sqStack,p);
    while(!stackEmpty(sqStack)){
        getTop(&sqStack,&p);
        if(p->lchild!=NULL&&p->lchild!=l){
            push(
&sqStack,p->lchild); } else { pop(&sqStack,&l); printf("%d ",l->data); if(l->rchild!=NULL){ push(&sqStack,l->rchild); } else if(l->rchild==NULL){ if(!stackEmpty(sqStack)){ pop(
&sqStack,&l); printf("%d ",l->data); if(l->rchild!=NULL){ push(&sqStack,l->rchild); } } } } } }

二叉樹中序遍歷非遞歸寫法