码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 102:Binary Tree Level Order Traversal

时间:2020-05-20 23:56:25      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:roo   code   traversal   order   private   ==   思路   empty   判断   

题意描述

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

测试用例

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

标签:roo   code   traversal   order   private   ==   思路   empty   判断   

原文地址:https://www.cnblogs.com/le-le/p/12927191.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!