难度中等567收藏分享切换为英文关注反馈
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
递归方法:
/**
* 102. 二叉树的层序遍历
* https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
*
* @param root
* @return
*/
public List<List<Integer>> levelOrder1(TreeNode root) {
if (root == null) {
return Collections.emptyList();
}
List<List<Integer>> res = new ArrayList<>();
List<TreeNode> first = new ArrayList<>();
first.add(root);
adds(first, res);
return res;
}
private void adds(List<TreeNode> levelNodes, List<List<Integer>> res) {
if (!levelNodes.isEmpty()) {
//当前层转为数字序列结果
List<Integer> list = new ArrayList<>(levelNodes.size());
List<TreeNode> nextLevelNodes = new ArrayList<>();
for (TreeNode levelNode : levelNodes) {
list.add(levelNode.val);
if (levelNode.left != null) {
nextLevelNodes.add(levelNode.left);
}
if (levelNode.right != null) {
nextLevelNodes.add(levelNode.right);
}
}
res.add(list);
if (!nextLevelNodes.isEmpty()) {
adds(nextLevelNodes, res);
}
}
}