二叉樹的層序遍歷

2021-09-26 06:57:45 字數 1648 閱讀 9373

通過前序遍歷的陣列"abd##gi##j###ce#hk###f##"構建二叉樹

通過前序遍歷的陣列"abd##gi##j###ce#hk###f##"構建二叉樹,並得到二叉樹的前序遍歷,中序遍歷,後序遍歷

二叉樹的層序遍歷需要借助於佇列,而佇列又由單鏈表實現

對無頭單向非迴圈鍊錶的回顧

原始檔 btree.c

//層序遍歷,層序遍歷需要借助佇列(佇列由單鏈表實現)

void binarytreelevelorder(btnode* root)

if (cur->rchild)

queuepop(&qu);

} queuedestory(&qu);

}其中佇列的實現分為以下步驟

標頭檔案 queue.h

#ifndef _queue_h

#define _queue_h

#include #include #include #include #include "btree.h"

typedef btnode * qudatatype;

typedef struct queuenodequeuenode;

typedef struct queuequeue;

//初始化函式

void queueinit(queue* plist);

//對應於初始化函式,需要釋放開闢的動態記憶體

void queuedestory(queue* plist);

//佇列中插入資料(佇列頭)

void queuepush(queue* plist, qudatatype x);

//刪除佇列中的資料(佇列尾)

void queuepop(queue* plist);

//返回佇列頭的資料

qudatatype queuetop(queue* plist);

//判斷佇列是否為空

int queueisempty(queue* plist);

//列印鍊錶

void queueprint(queue* plist);

#endif //_queue_h

函式實現原始檔 queue.c

#include "queue.h"

#include "btree.h"

//初始化函式

void queueinit(queue* plist)

//判斷佇列是否為空

int queueisempty(queue* plist)

//佇列中插入資料(佇列尾入)

void queuepush(queue* plist, qudatatype x)

plist->_rear->_next = cur;

plist->_rear = cur;

}//刪除佇列中的資料(佇列頭出)

void queuepop(queue* plist)

}//返回佇列頭的資料

qudatatype queuetop(queue* plist)

return plist->_head->_data;

}//對應於初始化函式,需要釋放開闢的動態記憶體

void queuedestory(queue* plist)

}

二叉樹層序遍歷 求二叉樹的層序遍歷

給定乙個二叉樹,返回該二叉樹層序遍歷的結果,從左到右,一層一層地遍歷 例如 給定的二叉樹是,該二叉樹層序遍歷的結果是 3 9,20 15,7 示例1 輸入 返回值 1 2 示例2輸入 返回值 1 2,3 4,5 解題思路 重點是如何把在一層的節點放到一起,設定乙個引數專門放一層的節點 class t...

層序遍歷二叉樹

要求 設計乙個演算法層序遍歷二叉樹 同一層從左到右訪問 我寫了乙個演算法 用乙個佇列儲存被訪問的當前節點的左右孩子以實現層序遍歷。status hierarchybitree bitree t,status visit telemtype e destroyqueue q 釋放佇列空間 return...

二叉樹層序遍歷

主要流程 確定root非空 根指標進佇列 佇列非空就一直迴圈 依次掃瞄目前佇列中所有元素 新增的不算 從佇列取出第一元素 將值放入結果vector中 判斷左右子節點非空,並依次入隊 將本次結果放入二維陣列中 如果需要按層逆序輸出的話,在這裡將二維結果倒排一下 返回二維結果 vector levelo...