102:二叉树的层序遍历

问题描述

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

示例

二叉树:[3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

思路

DFS和BFS都可以做到。 但是BFS为佳。这题就是为BFS而生的。
BFS(方法一)
DFS(方法二)

方法一

Java版

import java.util.*;
public class Main{
    public static void main(String[] args){

    }
}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();// 存储结果
        Queue<TreeNode> queue = new LinkedList<>(); // 层序遍历
        if(root == null) return res;
        queue.add(root);
        while(!queue.isEmpty()){
            Queue<TreeNode> next = new LinkedList<>(); // 下一次的queue
            List<Integer> tmp = new ArrayList<>(); // 待加入结果的arrayList
            while(!queue.isEmpty()){
                TreeNode tmpNode = queue.poll();
                tmp.add(tmpNode.val);
                if(tmpNode.left != null) next.add(tmpNode.left);
                if(tmpNode.right != null) next.add(tmpNode.right);
            }
            res.add(tmp);
            queue = next; // 更新
        }
        return res;
    }
}

方法二

Java版

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        if(root == null) return res;
        DFS(res,root,0);
        return res;
    }
    private void DFS(List<List<Integer>> res,TreeNode root, int depth){
        if(depth == res.size()){
            res.add(new ArrayList<>());
        }
        res.get(depth).add(root.val);
        if(root.left != null) DFS(res,root.left,depth+1);
        if(root.right != null) DFS(res,root.right, depth+1);
    }
}
发布了464 篇原创文章 · 获赞 21 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/105365610