二叉樹層次遍歷,每行輸出一層結果

2021-10-05 02:58:59 字數 1747 閱讀 4972

給你乙個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。

示例:二叉樹:[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...