给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3 / 9 20 / 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
这道题有两种解法:递归和遍历
递归可以用level和list去存每层的节点,如果这层节点没有相应的list去存,就新建一个list,然后将当前节点存入。如果不为空,则取出当前层数的list,将新节点存入。
List<List<Integer>> levels = new ArrayList<>(); public List<List<Integer>> levelOrder(TreeNode root) { //判断传入的节点是否为空 if (root == null) { return levels; } dfs(root, 0); return levels; } public void dfs(TreeNode root, int level) { //判断该层有没有list if (level == levels.size()) { levels.add(new ArrayList<>()); } //存入节点 levels.get(level).add(root.val); //如果左右子树不为空就存入 if (root.left != null) { dfs(root.left, level + 1); } if (root.right != null) { dfs(root.right, level + 1); }