二叉樹中序遍歷的非遞歸算法同樣可以使用棧來實現,從根結點開始,將根結點的最左結點全部壓棧,當結點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; // 轉向處理右孩子結點 } } } }