中序遍歷的非遞迴演算法

2022-07-01 08:45:12 字數 892 閱讀 1456

1..中序遍歷的非遞迴演算法演算法思想 --->利用棧來代替遞迴遍歷

1.初始時依次掃瞄根節點及根節點的左側結點,並將一一入棧,如果結點不存在,結束入棧

2.(當結點不存在時),出棧乙個結點,訪問它(可以是輸出結點的資料域的值)

3.掃瞄該結點的右孩子結點,並將其入棧

4.依次掃瞄該右孩子的所有左側結點,並將一一入棧

5.反覆該過程,直到棧為空為止.

2.**實現c/c++

#include#include#include#define maxsize 50

using namespace std;

typedef char elemtype;

//樹結點定義

typedef struct nodebitnode,*bitree;

//棧結點定義

typedef bitree datatype;

typedef struct node1sqstack;

//初始化乙個空的二叉樹

void initbitree(bitree &tree)

//建立二叉樹 #表示空結點

void createbitree(bitree &t)

}//初始乙個空棧

void initstack(sqstack &s)

//判斷棧是否為空

bool stackempty(sqstack &s)

}//入棧,要判斷棧是不是滿了

中序遍歷(非遞迴)

前序遍歷 前序遍歷的遞迴實現 void preorder bintree root 非遞迴實現 根據前序遍歷訪問的順序,優先訪問根節點,然後再分別訪問左孩子和右孩子。即對於任一節點,其可看做是根節點,因此可以直接訪問,訪問完之後,若其左孩子 不為空,按相同規則訪問它的左子樹,當訪問其左子樹時,在訪問...

樹中序遍歷 非遞迴

步驟1 結點的所有路徑情況 如果結點有左子樹,該結點入棧 如果結點沒有左子樹,訪問該結點 如果結點有右子樹,重複步驟1 如果結點沒有右子樹 結點訪問完畢 回退,讓棧頂元素出棧,訪問棧頂元素,並訪問右子樹,重複步驟1 如果棧為空,表示遍歷結束。include iostream include stac...

非遞迴實現先序遍歷和中序遍歷

先序建立二叉樹,表示空結點。使用棧,實現非遞迴先序遍歷和中序遍歷。使用佇列實現層次遍歷。直接上 寒假完善注釋,甚至從頭到尾把 資料結構與演算法 的相關 寫一遍。include include include include using namespace std typedef char datat...