二叉树的层次遍历(Binary Tree Level Order Traversal)java_leetcode 102
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangjingao/article/details/90064577
题干
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
解题思路
该题是一个广度遍历题,首先使用一个集合存放结果集,一个集合存放每次遍历的节点集,之后遍历需要遍历的节点集将其左右子树加入结果集中。
代码
public List<List<Integer>> levelOrder(TreeNode root) {
List<TreeNode> nowRunNode = new LinkedList<>();
nowRunNode.add(root);
List<List<Integer>> result = new LinkedList<>();
if (root == null) {
return result;
}
//先将根放入结果集
List<Integer> list = new ArrayList<>(1);
list.add(root.val);
result.add(list);
work(nowRunNode, result);
return result;
}
private void work(List<TreeNode> nowRunNode, List<List<Integer>> result) {
if (nowRunNode.size() == 0) {
return;
}
List<TreeNode> sunRunNode = new LinkedList<>();
List<Integer> list = new LinkedList<>();
while (nowRunNode.size() > 0) {
TreeNode treeNodeLeft = nowRunNode.get(0).left;
TreeNode treeNodeRight = nowRunNode.get(0).right;
nowRunNode.remove(0);
if (treeNodeLeft != null) {
sunRunNode.add(treeNodeLeft);
list.add(treeNodeLeft.val);
}
if (treeNodeRight != null) {
list.add(treeNodeRight.val);
sunRunNode.add(treeNodeRight);
}
}
if (list.size() > 0) {
result.add(list);
}
work(sunRunNode, result);
}