二叉樹三種遍歷方式的非遞迴實現

2021-09-25 02:25:19 字數 1491 閱讀 2170

**說明

#include

#include

#include

#include

#include

//棧using

namespace std;

#define n 100

//最大節點個數

typedef

struct mybinarytree

bt;bt *

createbt

(char

*pre,

char

*in,

int k)

;//根據先序和中序序列建立二叉樹,k表示節點個數

void

showtree

(bt *t)

;//以括號的形式顯示二叉樹

void

previsit

(bt *t)

;//非遞迴先序遍歷

void

invisit

(bt *t)

;//非遞迴中序遍歷

void

postvisit

(bt *t)

;//非遞迴後序遍歷

intmain

(void

)bt *

createbt

(char

*pre,

char

*in,

int k)

//根據先序和中序序列建立二叉樹,k表示節點個數

}void

showtree

(bt *t)

//以括號的形式顯示二叉樹}}

void

previsit

(bt *t)

//非遞迴先序遍歷

//初始化

t.push

(t);

while

(!t.

empty()

)//若棧非空

}void

invisit

(bt *t)

//非遞迴中序遍歷

//彈棧(此時棧非空)

p=t.

top();

//表示左子樹已經遍歷過的根節點

cout<

>data;

//訪問根節點

t.pop();

q=p-

>right;

//遍歷右子樹}}

void

postvisit

(bt *t)

//非遞迴後序遍歷

pre=

null

;//最新彈出的節點

while

(!t.

empty()

)else}}

while

(!t.

empty());}

執行結果

二叉樹三種遍歷方式非遞迴實現

1.中序遍歷 應為輸出的子樹根的關鍵字位於其左子樹關鍵字值和右子樹的關鍵字值之間 同理,先序後序遍歷。1.先序遍歷非遞迴演算法 define maxsize 100 typedef struct sqstack void preorderunrec bitree t endwhile if stac...

二叉樹三種遍歷方式 非遞迴

二叉樹的先序 中序 後序遍歷,採用非遞迴實現。非遞迴實現的乙個基本思路 在遍歷的過程中要用棧來儲存遍歷中經過的結點。include includetypedef char datatype 定義二叉樹型別的節點 typedef struct btnodebtree 建立二叉樹,以先序的方式輸入,如果...

二叉樹三種遍歷方式 遞迴和非遞迴

樹形結構是一類重要的非線性資料結構。其中以樹和二叉樹是最為常用。二叉樹有四種遍歷順序 先序遍歷 前序遍歷 中序遍歷,後序遍歷,層序遍歷。這三種遍歷的方式其實是由遍歷的根結點的順序來定義的。先序遍歷 先訪問根結點,再遍歷它的左子樹,最後遍歷它的右子樹。中序遍歷 先遍歷左子樹,然後訪問根結點,最後遍歷它...