LeetCode 二叉樹的層次遍歷

2021-09-29 08:49:55 字數 1573 閱讀 5903

第102題

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

例如:給定二叉樹: [3,9,20,null,null,15,7],

3/ \

9 20

/ \

15 7

返回其層次遍歷結果:

[ [3],

[9,20],

[15,7]

]

有兩種通用的遍歷樹的策略:

在這個策略中,我們採用深度作為優先順序,以便從跟開始一直到達某個確定的葉子,然後再返回根到達另乙個分支。

深度優先搜尋策略又可以根據根節點、左孩子和右孩子的相對順序被細分為先序遍歷,中序遍歷和後序遍歷。

我們按照高度順序一層一層的訪問整棵樹,高層次的節點將會比低層次的節點先被訪問到。

我們將樹上頂點按照層次依次放入佇列結構中,佇列中元素滿足 fifo(先進先出)的原則。使用 queue 介面中的 linkedlist實現。

演算法實現如下:

/**

* 廣搜+佇列

*/class solution102_1

list> bfs(treenode root)

if (node.right != null)

subresult.add(node.val);

}result.add(subresult);

}return result;

}}

首先確認樹非空,然後呼叫遞迴函式 dfs(node,result,level),引數是當前節點、返回結果列表、節點的層次。

演算法實現如下:

/**

* 深搜+遞迴

*/class solution102_2

void dfs(treenode node, list> result, int level)

result.get(level - 1).add(node.val);

if (node.left != null)

if (node.right != null)

}}

public class sub102 

}}/**

* 廣搜+佇列

*/class solution102_1

list> bfs(treenode root)

if (node.right != null)

subresult.add(node.val);

}result.add(subresult);

}return result;

}}/**

* 深搜+遞迴

*/class solution102_2

void dfs(treenode node, list> result, int level)

result.get(level - 1).add(node.val);

if (node.left != null)

if (node.right != null)

}}

LeetCode 初級演算法 樹 二叉樹的層次遍歷

給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回其層次遍歷結果 3 9,20 15,7 一開始的解法是,先層次遍歷把所有的樹節點存放進乙個二維list中,然後在做一次巢狀迴圈將每個節點的...

LeetCode 力扣 102 二叉樹的層次遍歷

二叉樹的層次遍歷,輸出乙個 list 的 list。這道題考的就是 bfs,我們可以通過 dfs 實現。只需要在遞迴過程中將當前 level 傳入即可。public list levelorder treenode root private void dfs treenode root,int le...

leetcode 二叉樹 二叉樹的層次遍歷

給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回其層次遍歷結果 3 9,20 15,7 方法一 遞迴 思路 比較訪問節點所在層次level和當前最高層次len levels 判定是否需...