102. 二叉树的层序遍历

描述

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7

返回其层序遍历结果:

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

解题思路

利用队列(列表)实现层次遍历即可

代码如下

class Solution {
  public List<List<Integer>> levelOrder(TreeNode root) {
    if (root == null){
      return new ArrayList<>();
    }
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    List<TreeNode> cur = new ArrayList<TreeNode>();
    List<TreeNode> next = new ArrayList<TreeNode>();
    cur.add(root);
    res.add(
        cur.stream()
            .map(x -> x.val)
            .collect(ArrayList::new, (list, item) -> list.add((Integer) item), List::addAll));
    while (!cur.isEmpty()) {
      TreeNode remove = cur.remove(0);
      if (remove.left != null) {
        next.add(remove.left);
      }
      if (remove.right != null) {
        next.add(remove.right);
      }
      if (cur.isEmpty()) {
        if (!next.isEmpty()) {
          List<Integer> collect =
              next.stream()
                  .map(x -> x.val)
                  .collect(ArrayList::new, (list, item) -> list.add((Integer) item), List::addAll);
          res.add(collect);
          cur = next;
          next = new ArrayList<TreeNode>();
        }
      }
    }
    return res;
  }
}

运行结果

14:48    info
                        解答成功:
                        执行耗时:6 ms,击败了10.43% 的Java用户
                        内存消耗:38.9 MB,击败了11.20% 的Java用户

题解

方法一:广度优先搜索

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> ret = new ArrayList<List<Integer>>();
        if (root == null) {
            return ret;
        }

        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            List<Integer> level = new ArrayList<Integer>();
            int currentLevelSize = queue.size();
            for (int i = 1; i <= currentLevelSize; ++i) {
                TreeNode node = queue.poll();
                level.add(node.val);
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
            ret.add(level);
        }
        
        return ret;
    }
}

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/er-cha-shu-de-ceng-xu-bian-li-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

小结

stream 耗时较多

添加新评论