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

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

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; //
轉向處理右孩子結點 } } } }

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