版权声明:本文为博主原创文章,未经博主允许不得转载。
难度:中等
要求:
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例:
一个例子:
给一棵二叉树 {3,9,20,#,#,15,7} :
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
上述这棵二叉树序列化为 {2,1,4,#,#,3,5}.
实现:
/**
* 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: A Tree
* @return: Level order a list of lists of integer
*/
public List<List<Integer>> levelOrder(TreeNode root) {
//返回值
List<List<Integer>> ret = new ArrayList<List<Integer>>();
if (root == null) {
return ret;
}
//当前行容器
List<Integer> cell = new ArrayList<Integer>();
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
TreeNode last = root;//当前行的最后一个节点
TreeNode nLast = root;//下一行的最后一个节点
while (!queue.isEmpty()) {
TreeNode node = queue.pop();
//记录当前节点
cell.add(node.val);
if (node.left != null) {
queue.add(node.left);
nLast = node.left;
}
if (node.right != null) {
queue.add(node.right);
nLast = node.right;
}
//表示已经遍历到本行最后一个节点,要换行
if (node == last) {
last = nLast;
ret.add(cell);
cell = new ArrayList<Integer>();
}
}
return ret;
}
}
网友评论