第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 判定是否需...