題目描述:code
題目連接: 102-Binary Tree Level Order Traversalblog
這個問題要解決的是如何逐層遍歷一個二叉樹,並把同一層元素放入同一list中, 再將全部元素返回。遞歸
其實當時個人第一個反應就是樹類型的題目已經作了好多了,無非用來用去就是遞歸,或者隊列,那如何解決這個問題呢?隊列
先觀察:leetcode
咱們的順序確定只能從root開始往下走, 同時咱們考慮最基本的形態, 只有一個root, 和兩個子節點,[3] 獲得 [9, 20]; 而後再由[9, 20] 獲得[15, 7];這只是表面上的, 應爲null的節點結果裏不須要, 實際上的每層數據是如此:get
其實也就是說, 全部當前層的節點, 其實都是由上一層每一個節點的左右子樹而來, 直到第一層root爲止。可能個人表述有不清楚, 接下來咱們一步一步拆解就是:二叉樹
(1)首先咱們獲得了root, 就是3這個節點, 放入當前節點列表list, 由於只有root一個, 這一層咱們結束了, 因此就把放入結果集ret中,同時獲得下層要用的list(3);rsa
(2)以後第二層怎麼獲得呢? 天然是以前獲得的節點列表list, 從中獲得了root, 取root的左右子樹, 9, 20, 從新放入list(注意這個list要清空, 或者新建一個), 同時寶塔放入結果集ret中,同時獲得下層要用的list(9, 20);遍歷
(3)如法炮製:獲得list(15, 17) , (注意, 對於9的左右子樹,沒有的狀況就不須要加入list中, 題目要求的結果不須要顯示null值。), 放入結果集, 同時獲得list(null)im
(4)由於當list(null)時, 也就意味着上一個list 已經到了最後一層, 因此結束。
具體代碼:
對了,這以上都是本人的一種思路和想法, 確定還有別的更好的解決方案, 但願有同窗能夠在下面評論一塊兒交流探討:)
哦, 差點忘記提了, 還有一道關聯題, https://leetcode.com/problems/binary-tree-level-order-traversal-ii/,要求改爲了逆序輸出, 即從
最後一層往前倒第一層地逐層遍歷, 我想只要將結果集reverse下就行了吧, 或者一開始就遞歸求解?