樹的遞迴與非遞迴遍歷

2021-10-25 10:46:39 字數 2609 閱讀 8322

樹的遞迴遍歷

/*建立一棵用二叉鍊錶方式儲存的二叉樹,並對其進行遍歷(先序、中序和後序),將遍歷序列輸出到顯示器上。

【基本要求】從鍵盤輸入一棵二叉樹的先序序列,以二叉鍊錶作為儲存結構,建立二叉樹並對其進行遍歷(先序、中序和後序),然後將遍歷結果列印輸出。要求編寫遞迴和非遞迴兩種演算法來實現。

【測試資料】 輸入序列:abc**de*g**f***(其中*表示空子樹)

輸出結果:先序序列abcdegf

中序序列cbegdfa

後序序列cgefdba

*/#include

#include

#include

#define maxsize 10

typedef

char bitreedatatype;

typedef

struct node

bitree;

//二叉樹的建立

bitree *

createbitree

(bitreedatatype * tree,

int* i)

else

}//遞迴

//二叉樹的先序遍歷

void

preorder

(bitree * bit)

}//二叉樹的中序遍歷

void

inorder

(bitree * bit)

}//二叉樹的後序遍歷

void

postorder

(bitree * bit)

}//樹節點的銷毀

void

destroy

(bitree * bit)

}//遞迴的二叉樹

void

test01()

void

test02()

intmain()

樹的非遞迴遍歷:

/*建立一棵用二叉鍊錶方式儲存的二叉樹,並對其進行遍歷(先序、中序和後序),將遍歷序列輸出到顯示器上。

【基本要求】從鍵盤輸入一棵二叉樹的先序序列,以二叉鍊錶作為儲存結構,建立二叉樹並對其進行遍歷(先序、中序和後序),然後將遍歷結果列印輸出。要求編寫遞迴和非遞迴兩種演算法來實現。

【測試資料】 輸入序列:abc**de*g**f***(其中*表示空子樹)

輸出結果:先序序列abcdegf

中序序列cbegdfa

後序序列cgefdba

*/#include

#include

#include

#define maxsize 50

typedef

char bitreedatatype;

typedef

struct node

bitree;

typedef

struct stackbitree

stack;

//二叉樹的建立

bitree *

createbitree

(bitreedatatype * tree,

int* i)

else

}//初始化

void

initstack

(stack * s)

//判斷棧是否為空

intstackisempty

(stack * s)

return1;

}//入棧

void

enterbitree

(stack * s,bitree * bit)

s->top++

; s->t[s->top]

= bit;

}//棧頂元素

bitree *

gettopbitree

(stack * s)

//出棧

void

poptree

(stack * s)

//非遞迴先序

void

prebitorder

(bitree * bit, stack * s)

p =gettopbitree

(s);

poptree

(s);

p = p->right;}}

//非遞迴中序

void

inbitorder

(bitree * bit, stack * s)

p =gettopbitree

(s);

poptree

(s);

printf

("%c"

, p->data)

; p = p->right;}}

//非遞迴後序

void

postbitorder

(bitree * bit, stack * s)

p =gettopbitree

(s);

if(p->right ==

null

|| p->right == pre)

else}}

void

test01()

intmain()

樹的遍歷遞迴非遞迴

1先序 遞迴 class solution public void b list list,treenode tree 非遞迴 class solution else return list 2中序 遞迴 class solution public void b list list,treenode...

樹的遞迴和非遞迴遍歷

利用迴圈和棧實現前序 中序和後序遍歷 利用佇列實現層次遍歷 typedef struct node bitree stacks 前序遍歷 針對乙個根結點,先輸出其根結點值,再push其所有左結點,然後再彈出乙個結點取其右結點作為新的根結點。void preorder bitree t 前序遍歷的非遞...

樹的非遞迴遍歷

在vs2011版本中除錯通過。include stdafx.h include stack.h include 標準庫中定義的棧 includeusing namespace std define max len 15 void create tree treenode head,char pdat...