二叉樹遍歷非遞歸算法——中序遍歷
阿新 • • 發佈:2017-07-15
spa tdi str max logs nor 算法實現 中序遍歷 非遞歸
二叉樹中序遍歷的非遞歸算法同樣可以使用棧來實現,從根結點開始,將根結點的最左結點全部壓棧,當結點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; //轉向處理右孩子結點 } } } }
二叉樹遍歷非遞歸算法——中序遍歷