給你乙個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。
示例:二叉樹:[1,2,3,4,5,null,7],
返回其層次遍歷結果:
[[3],
[9,20],
[15,7]
]每天記錄一下,保證徹底掌握。
分析:
1.首先想要層次遍歷,得清楚當前是哪一層,假如要輸出第三層【4,5,7】,你得拿到【2,3】
2.訪問節點,搞乙個容器裝節點的子節點,再訪問節點,容器再加入的子節點
3.那麼現在呢,這個容器就裝好了第三層的結果
這只是一層的分析,有乙個初步的思路。
然後再往下思考,想訪問到節點,發現【2,3】節點剛好是第二層的結果
現在應該有思路了
遞迴是不是,遍歷訪問每一層的結果的子節點,就能得到下一層的結果。
這裡我不使用遞迴,維護乙個佇列去儲存每次要遍歷節點
queue
queue =
newlinkedlist
<
>()
;
現在開始寫**(寫之前先考慮邊界,空值,這裡先省略),
把根節點加入
queue.
add(root)
;
將根節點加入,當queue不為空【】,就對queue每個節點去進行上面分析的操作
為了實現讓一層節點加入到同一集合,讓這些節點處於同乙個條件下進行add,即可加入到同一集合
int count= queue.
size()
;list
list =
newarraylist
<
>()
;while
(count>0)
if(node.right!=null)
count--
;}
將list加入到結果集
完整**:
public
class
solution
list
> res =
newarraylist
>()
; queue
queue =
newlinkedlist
<
>()
; queue.
add(root)
;while
(!queue.
isempty()
)if(node.right != null)
count--;}
res.
add(list);}
return res;}}
class
treenode
}
再記錄乙個遞迴解法,有時候面試官會問有沒有其他處理方式。
class
solution
rec(root,0)
;return res;
}public
void
rec(treenode node,
int level)
res.
get(level)
.add
(node.val);if
(node.left != null)
if(node.right != null)
}}
層次遍歷二叉樹 並輸出遍歷結果
include include define max 100 typedef char elemtype typedef struct bitnode bitnode,bintree 建立二叉樹 void createbintree bintree t 按要求輸出二叉樹 void print bin...
按層列印二叉樹 每行列印一層
一,問題介紹 給定一棵二叉樹,按照層序遍歷的順序列印二叉樹。但是要求,每一行列印一層資料。二,演算法分析 借助二叉樹的層序遍歷來實現 使用佇列的先入先出性質保證列印的順序 二叉樹層序遍歷參考 層序列印參考 1 public void printtree binarynoderoot 21if cur...
層次遍歷輸出二叉樹
利用層次遍歷演算法,輸出二叉樹的各個結點.說明 需事先利用括號掃瞄法建立乙個二叉鏈bt,該二叉樹bt的括號表示法對應的字串為 a b d g h c e f,i include stdio.h include stdlib.h include ctype.h define maxsize 20 ty...