Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7},java
3 / \ 9 20 / \ 15 7
return its level order traversal as:node
[ [3], [9,20], [15,7] ]
給定一個二叉樹,輸出它的每一層的結點。算法
使用兩隊列,一個保存當前處理的層,一個保存下一次要處理的層。只到每一層都處理完。spa
樹結點類.net
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
算法實現類code
import java.util.ArrayList; import java.util.Deque; import java.util.LinkedList; import java.util.List; public class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); if (root == null) { return result; } Deque<TreeNode> cur = new LinkedList<>(); Deque<TreeNode> sub = new LinkedList<>(); Deque<TreeNode> exc; TreeNode node; cur.addLast(root); while (!cur.isEmpty()) { List<Integer> layout = new LinkedList<>(); while (!cur.isEmpty()) { node = cur.removeFirst(); layout.add(node.val); if (node.left != null) { sub.addLast(node.left); } if(node.right != null) { sub.addLast(node.right); } } exc = cur; cur = sub; sub = exc; result.add(layout); } return result; } }