二叉樹的層序遍歷

2021-08-18 21:29:24 字數 948 閱讀 3267

之前寫過二叉樹的先序、中序、後序遍歷,今天給大家介紹一下二叉樹的層序遍歷。二叉樹的層序遍歷

層序遍歷也很好理解,一層一層的將你的二叉樹遍歷後輸出。根據這個圖輸出順序也就是125346.

這裡要怎麼實現,通過乙個佇列來實現,思想就是首先將你的root結點,進入佇列,然後當你從佇列出元素的時候如果他有左孩子或者右孩子的話就將他的左右孩子進入佇列, 一直迴圈下去就可以實現二叉樹的層序遍歷。

看上圖,首先讓1進來,當前佇列不為空那就從佇列出元素,1這時候1輸出,1出的同時判斷他的左右孩子是不是為空,不為空,兩個都進佇列,此時佇列不為空,出隊頭元素2,出2的同時讓2的左右孩子不為空的進入對列,之前1的右孩子5比2的左右孩子先進入佇列所以現在出佇列是出5,依次下去就能實現二叉樹的層序遍歷。

這裡在建立佇列的時候有一些需要注意的地方,無論你是用的鍊錶還是陣列都要注意乙個小問題,這裡用來儲存資料的結構型別都應該是你的二叉樹的型別,當然不注意這個問題你是編譯不過去的。

typedef

struct

queue

queue;

這是我的佇列的結構體。資料型別要用btnode*型別的。

void btreelevelorder(btnode* root)

}

這裡就不能再用遞迴的思想了,這裡需要用while迴圈控制你迴圈的條件就是你佇列條件如果是空的話,那就說明已經沒有再進入佇列的元素,**並不難需要的是思想和細節,我的程式到現在還有一些小問題,不過編譯除錯了幾次之後認為問題不在層序遍歷這個函式,應該是自己對佇列的一些操作的問題,還是得再仔細的除錯幾遍找到問題,感覺寫**提公升的是你對程式,對語言的運用,鍛鍊的是編寫程式的思想,但是除錯才是對你編碼能力的提公升。自己還是需要把自己寫的每個程式都仔仔細細跑一遍,找出每乙個小問題。

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

給定乙個二叉樹,返回該二叉樹層序遍歷的結果,從左到右,一層一層地遍歷 例如 給定的二叉樹是,該二叉樹層序遍歷的結果是 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...