二叉樹三種遍歷的非遞迴演算法(背誦版)

2021-04-02 14:42:14 字數 868 閱讀 8553

本文給出二叉樹先序、中序、後序三種遍歷的非遞迴演算法,此三個演算法可視為標準演算法,直接用於考研答題。

1.先序遍歷非遞迴演算法

#define maxsize 100

typedef struct

sqstack;

void preorderunrec(bitree t)

//endwhile

if (!stackempty(s))         //通過下一次迴圈中的內嵌while實現右子樹遍歷

//endif

}//endwhile

}//preorderunrec

2.中序遍歷非遞迴演算法

#define maxsize 100

typedef struct

sqstack;

void inorderunrec(bitree t)

//endwhile

if (!stackempty(s))

//endif   

}//endwhile

}//inorderunrec

3.後序遍歷非遞迴演算法

#define maxsize 100

typedef enum tagtype;

typedef struct

stacknode;

typedef struct

sqstack;

void postorderunrec(bitree t)

while (!stackempty(s) && s.elem[s.top].tag==r)  

if (!stackempty(s))

}while (!stackempty(s));

}//postorderunrec

二叉樹三種非遞迴遍歷演算法

中序遍歷 void inorderwithoutrecursion1 btnode root 當p為空時,說明已經到達左子樹最下邊,這時需要出棧了if s.empty 先序 cpp void preorderwithoutrecursion1 btnode root 當p為空時,說明根和左子樹都遍歷...

二叉樹三種遍歷的非遞迴演算法

1.先序遍歷非遞迴演算法 define maxsize 100 typedef struct sqstack void preorderunrec bitree t endwhile if stackempty s 通過下一次迴圈中的內嵌while實現右子樹遍歷 endif endwhile pre...

二叉樹的三種非遞迴遍歷

一.前序遍歷 前序遍歷按照 根結點 左孩子 右孩子 的順序進行訪問。1.遞迴實現 void preorder1 bintree root 遞迴前序遍歷 2.非遞迴實現 根據前序遍歷訪問的順序,優先訪問根結點,然後再分別訪問左孩子和右孩子。即對於任一結點,其可看做是根結點,因此可以直接訪問,訪問完之後...

二叉樹的三種非遞迴遍歷

遞迴演算法和非遞迴演算法的轉換 可以藉助棧,將二叉樹的遞迴演算法轉換為非遞迴演算法,下面以中序遍歷為例給出中序遍歷的非遞迴演算法。先掃描 並非訪問 根結點的所有左結點並將他們一一進棧。然後出戰一個結點 p 顯然結點 p沒有左孩子結點或者左孩子結點均已訪問過 則訪問它。然後掃描該結點的有孩子結點,將其...

二叉樹的三種非遞迴遍歷

struct treenode 一 前序輸出二叉樹 void preorder treenode root p stk.top stk.pop p p right 二 中序輸出二叉樹 void midorder treenode root p stk.top cout void postorder ...