LeetCode DFS、BFS篇(102)
阿新 • • 發佈:2020-07-15
102. 二叉樹的層序遍歷
給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。
示例:
二叉樹:[3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其層次遍歷結果:
[
[3],
[9,20],
[15,7]
]
//思路1BFS,優化廣度遍歷,一層一層放進deque進行遍歷,遍歷完一層就用list裝完加入res
//思路2DFS,每一層遞迴都用index做標記
solution1 BFS 迭代
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); ArrayDeque<TreeNode> deque = new ArrayDeque<>(); if (root != null) { deque.add(root); } while (!deque.isEmpty()){ int n = deque.size(); List<Integer> level = new ArrayList<>(); for (int i = 0;i<n;i++){ TreeNode node = deque.pop(); level.add(node.val); if (node.left!=null){ deque.add(node.left); } if (node.right!=null){ deque.add(node.right); } } res.add(level); } return res; } }
solution 2 DFS 遞迴
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); if (root == null){ return res; } dfs(res,root,1); return res; } public void dfs(List<List<Integer>> res,TreeNode node,int index){ if (res.size()<index){ res.add(new ArrayList<Integer>()); } res.get(index-1).add(node.val); if (node.left != null){ dfs(res,node.left,index+1); } if (node.right != null){ dfs(res,node.right,index+1); } } }