LeetCode 102:Binary Tree Level Order Traversal

Posted 一只菜鸡的奋斗史

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 102:Binary Tree Level Order Traversal相关的知识,希望对你有一定的参考价值。

题意描述

给定一个二叉树,返回其节点值的层数顺序遍历。 (即,从左到右,逐级)。

测试用例

Given binary tree [3,9,20,null,null,15,7],

    3
   /   9  20
    /     15   7

return its level order traversal as:

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

解题思路

一、思路一

  • 使用递归,根据树深度判断节点值应该添加入集合的哪个位置。
    public List<List<Integer>> levelOrder(TreeNode root) {
            List<List<Integer>> res = new ArrayList<>();
            if(root == null) return res;
            travel(root,res,0);
            return res;
        }
        private void travel(TreeNode root,List<List<Integer>> res,int depth){
            if(root == null) return;
            List<Integer> list;
            if(depth >= res.size()){	//深度》=集合大小,说明没有合适的位置存放节点值
                list = new ArrayList<>();	//创建新List
                list.add(root.val);
                res.add(list);
            }else{	//res中存在合适的位置
                list = res.get(depth);
                list.add(root.val);
            }
            travel(root.left,res,depth+1);	
            travel(root.right,res,depth+1);
        }

二、思路二

  • 使用队列,记录每层的节点个数,添加入List集合
  • 本层节点遍历完毕,将节点添加入新List
    public List<List<Integer>> levelOrder(TreeNode root) {
            List<List<Integer>> res = new ArrayList<>();
            if(root == null) return res;
            Queue<TreeNode> queue = new LinkedList<>();
            queue.add(root);
            int size = 0;
            while(!queue.isEmpty()){
                //每层遍历之前船舰新List
                List<Integer> list = new ArrayList<>();
                size = queue.size();//计算本层的节点总数
                while(size != 0){
                    root = queue.poll();
                    if(root != null){
                        list.add(root.val);
                    }
                    if(root.left != null){
                        queue.add(root.left);
                    }
                    if(root.right != null){
                        queue.add(root.right);
                    }
                    size --;//每遍历一个节点,本层数量--
                }
                res.add(list);
            }
            return res;
        }

以上是关于LeetCode 102:Binary Tree Level Order Traversal的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 102. Binary Tree Level Order Traversal

[LeetCode]题解(python):102- Binary Tree Level Order Traversal

LeetCode 102. Binary Tree Level Order Traversal

Leetcode 102. Binary Tree Level Order Traversal

[leetcode-102-Binary Tree Level Order Traversal]

Java [Leetcode 102]Binary Tree Level Order Traversal