二叉樹遍歷非遞歸算法——中序遍歷


  二叉樹中序遍歷的非遞歸算法同樣可以使用棧來實現,從根結點開始,將根結點的最左結點全部壓棧,當結點p不再有最左結點時,說明結點p沒有左孩子,將該結點

出棧,訪問結點p,然后對其右孩子做同樣的處理。

  二叉樹中序遍歷非遞歸算法實現如下:

#include <stdlib.h>
#include <stdio.h>
#define MAXSIZE 100
// 定義結點類型
typedef struct node
{
    int data;
    struct node* lchild;
    struct node* rchild;
} BTnode;

void Inorder(BTnode* t)
{
    BTnode* Seqstack[MAXSIZE];
    int top = -1;
    BTnode* p;
    if(t != NULL)
    {
        p = t;
        while(top > -1 || p != NULL)               
        {
            while(p != NULL)                        // while循環將根結點的最左結點全部壓棧
            {
                top ++;
                Seqstack[top] = p;
                p = p->lchild;
            }
            if(top > -1)                            // 當結點p沒有最左結點時出棧
            {
                p = Seqstack[top];
                printf("%d ", p->data);             // 訪問結點p
                top --;
                p = p->rchild;                      // 轉向處理右孩子結點
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM