層次遍歷的非遞迴演算法

2021-10-10 22:36:14 字數 2950 閱讀 3875

#include

#include

"btree.h"

#include

using

namespace std;

intmain()

else

if(q-

>rchild==

null

)else

printf

("\n(4)二叉樹深度:%d\n"

,btnodedepth

(p))

;printf

("\n(5)層次遍歷:");

dispbtnodebefore

(p);

printf

("\n(6)釋放二叉樹");

return0;

}

#define maxsize 100

typedef

char elemtype;

typedef

struct node

btnode;

typedef

struct

sqqueue;

void

initqueue

(sqqueue *

&q);

//初始化順序環形佇列

void

destroyqueue

(sqqueue *

&q);

//銷毀順序環形佇列

bool

queueempty

(sqqueue *q)

;//判斷順序環形佇列是否為空

intqueuelength

(sqqueue *q)

;//返回佇列中元素個數,也稱佇列長度

bool

enqueue

(sqqueue *

&q, btnode * e)

;//進隊

bool

dequeue

(sqqueue *

&q, btnode *

&e);

//出隊

void

createbtnode

(btnode *

&b,char

*str)

;//由str串建立二叉鏈

btnode *

findnode

(btnode *b,elemtype x)

;//返回data域為x的節點指標

btnode *

lchildnode

(btnode *p)

;//返回*p節點的左孩子節點指標

btnode *

rchildnode

(btnode *p)

;//返回*p節點的右孩子節點指標

intbtnodedepth

(btnode *b)

;//求二叉樹b的深度

void

dispbtnode

(btnode *b)

;//以括號表示法輸出二叉樹

void

destroybtnode

(btnode *

&b);

//銷毀二叉樹

void

dispbtnodebefore

(btnode *b)

;//層次遍歷

#include

#include

#include

"btree.h"

//二叉樹

void

createbtnode

(btnode *

&b,char

*str)

//由str串建立二叉鏈

else}}

j++; ch=str[j];}

}btnode *

findnode

(btnode *b,elemtype x)

//返回data域為x的節點指標

}btnode *

lchildnode

(btnode *p)

//返回*p節點的左孩子節點指標

btnode *

rchildnode

(btnode *p)

//返回*p節點的右孩子節點指標

intbtnodedepth

(btnode *b)

//求二叉樹b的深度

}void

dispbtnode

(btnode *b)

//以括號表示法輸出二叉樹}}

void

destroybtnode

(btnode *

&b)//銷毀二叉樹

}//佇列

void

initqueue

(sqqueue *

&q)//初始化順序環形佇列

void

destroyqueue

(sqqueue *

&q)//銷毀順序環形佇列

bool

queueempty

(sqqueue *q)

//判斷順序環形佇列是否為空

intqueuelength

(sqqueue *q)

//返回佇列中元素個數,也稱佇列長度

bool

enqueue

(sqqueue *

&q, btnode * e)

//進隊

bool

dequeue

(sqqueue *

&q, btnode *

&e)//出隊

void

dispbtnodebefore

(btnode *b)

if(p-

>rchild!=

null)}

destroyqueue

(qu)

;}

樹的遍歷,前中後 層次遍歷非遞迴

存在記憶體洩漏,原因是沒有銷毀結點時記憶體釋放的處理.include include include include using namespace std class cbtnode typedef cbtnode btnode class cbtroot void xianxubianli1 遞...

樹的遍歷(先中後序,非遞迴,層次遍歷)

樹的遍歷分為先序遍歷,中序遍歷以及後續遍歷。其中分為遞迴形式與非遞迴形式,及層次遍歷。先序遍歷 首先訪問根節點,然後訪問左子樹,最後訪問右子樹。void preorder bitree t 中序遍歷 首先訪問左子樹,然後訪問根節點,最後訪問右子樹。void inorder bitree t 後序遍歷...

二叉樹的遍歷(遞迴,非遞迴,層次)

二叉樹的非遞迴遍歷 二叉樹是一種非常重要的資料結構,很多其它資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序 中序以及後序三種遍歷方法。因為樹的定義本身就 是遞迴定義,因此採用遞迴的方法去實現樹的三種遍歷不僅容易理解而且 很簡潔。而對於樹的遍歷若採用非遞迴的方法,就要採用棧去模擬實現。在三...