5.小結
初始化乙個輔助佇列
根結點入隊若佇列非空,則隊頭結點出隊,訪問該結點,並將其左、右孩子插入隊尾(如果有的話)
重複3中的操作直至隊列為空
#include
#include
#define elemtype bitnode*
#define elemtype1 char
//1.二叉樹結點型別定義
typedef struct bitnode bitnode,
* bitree;
//2.輔助佇列結點型別定義
typedef struct linknode linknode;
//3.輔助佇列型別定義
typedef struct linkqueue;
/*函式宣告*/
void
initqueue
(linkqueue&q)
;//1.初始化佇列
bool liqueueempty
(linkqueue q);
//2.判空
bool enqueue
(linkqueue&
q, elemtype x)
;//3.入隊操作
bool exqueue
(linkqueue&
q, elemtype& x)
;//4.出隊操作
void
createbitree
(bitree&t)
;//5.先序建立二叉樹
void
visit
(bitnode* p)
;//6.列印結點
void
levelorder
(bitree t);
//7.二叉樹的層次遍歷
//1.初始化佇列(無頭結點)
void
initqueue
(linkqueue&q)
//2.判空(無頭結點)
bool liqueueempty
(linkqueue q
)
//3.入隊操作(無頭結點)
bool enqueue
(linkqueue&
q, elemtype x)
return
true
;}
//4.出隊操作(無頭結點)
bool exqueue
(linkqueue&
q, elemtype& x)
//5.先序建立二叉樹
void
createbitree
(bitree&t)
}
//6.列印結點-用於遍歷
void
visit
(bitnode* p)
//7.二叉樹的層次遍歷
二叉樹的層次遍歷與其他三種遍歷有所不同,屬於廣度優先遍歷,是佇列的具體應用,並且此實現過程是非遞迴的。
至此,二叉樹的遍歷操作基本介紹完成。遍歷是二叉樹的各種操作的基礎,可以在遍歷的過程中對結點進行各種操作,例如:求結點的雙親、求結點的孩子結點等。所有的這些操作都建立在二叉樹遍歷的基礎上,因此,必須掌握二叉樹的各種遍歷過程,才能更靈活的解決各種問題。
遍歷二叉樹後會得到乙個線性序列,除第乙個結點和最後乙個結點外,每個結點都有乙個直接前驅和直接後繼。但傳統的二叉鍊錶僅能體現父子關係,查詢結點的前驅和後繼是很不方便的。因此,利用「n個結點的二叉鍊錶中,含有n+1個空鏈域」這一特性,通過這n+1個空指標來存放其前驅或後繼的指標,以達到加快查詢結點前驅和後繼的速度,因此,引入線索二叉樹。
資料結構 二叉樹層次遍歷
1 二叉樹的層次遍歷 2 假設二叉樹採用二叉鏈儲存結構,設計乙個演算法輸出從根節點到每個葉子節點的路徑的逆 即求葉子節點及其所有祖先節點的序列 include include define maxsize 100 typedef char elemtype using namespace std t...
資料結構 二叉樹 廣度遍歷(層次)
力扣題目 102.二叉樹的層序遍歷 107.二叉樹的層次遍歷ii 199.二叉樹的右檢視 637.二叉樹的層平均值 429.n叉樹的層序遍歷 102.二叉樹的層序遍歷 1.用佇列去裝 先入根節點 2.當前層出隊,並把左右節點入隊 3.重複二,直到佇列空 class solution answer.p...
二叉樹的層次遍歷 佇列的應用
給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回其層次遍歷結果 3 9,20 15,7 二叉樹層次遍歷的題目,第一想到的就是官渡優先搜尋。下面做乙個總結 樹的遍歷方法一般分為兩種 一種...