给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例
给一棵二叉树 {3,9,20,#,#,15,7} :
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
只使用一个队列:
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: Level order a list of lists of integer
*/
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(null == root) return result;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while(!queue.isEmpty()) {
queue.add(null);
ArrayList<Integer> everyLine = new ArrayList<Integer>();
TreeNode node = null;
while((node = queue.poll()) != null) {
everyLine.add(node.val);
if(node.left != null)
queue.add(node.left);
if(node.right != null)
queue.add(node.right);
}
result.add(everyLine);
}
return result;
}
}
使用多个队列:
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: Level order a list of lists of integer
*/
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(null == root) return result;
Queue<TreeNode> preLine = new LinkedList<TreeNode>();
preLine.add(root);
while(!preLine.isEmpty()) {
ArrayList<Integer> everyLine = new ArrayList<Integer>();
Queue<TreeNode> postLine = new LinkedList<TreeNode>();
while(!preLine.isEmpty()) {
TreeNode node = preLine.poll();
everyLine.add(node.val);
if(null != node.left)
postLine.add(node.left);
if(null != node.right)
postLine.add(node.right);
}
preLine = postLine;
result.add(everyLine);
}
return result;
}
}