美文网首页
[leetcode]102 Binary Tree Level

[leetcode]102 Binary Tree Level

作者: studyz | 来源:发表于2016-04-14 18:41 被阅读131次

1、题目

题目链接:https://leetcode.com/problems/binary-tree-level-order-traversal/

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:Given binary tree

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

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

题目的大意是从上到下,从左到右,依次输出一个二叉树的所有元素。


2、思路

首先想到的是递归,没有想出解决办法。其实用不到递归,只需要按层来循环遍历即可,遍历当前层的过程中,需要做两件事:

1、顺序收集下一层的所有节点
2、顺序收集本层节点的值

所以需要两个collector,一个全局collector用来收集的没各节点的值,一个局部collector来收集下一层的所有节点,当局部collector的size为0时,停止循环。

由此主循环的伪代码如下:

  while(localCollector.eize>0){
      localCollector = collect(globalCollector,localCollector)
  }
  return globalCollector 

收集器的伪代码如下:

  collect(globalCollector,localCollector){
      collect this layer's value...
      collect next layer's node...
  }

3、实现过程

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        //local collector
        List<TreeNode> tmp = new ArrayList<>();
        //global collector
        List<List<Integer>> collector = new ArrayList<>();
        if(root != null){
            tmp.add(root);
        }
        //main loop
        while(tmp.size()>0){
            tmp = collect(collector,tmp);
        }
        return collector;
    }
    
    private List<TreeNode> collect(List<List<Integer>> collector,List<TreeNode> tmp){
        if(tmp == null || tmp.size() == 0){
            return tmp;
        }
        List<TreeNode> _tmp = new ArrayList<>();
        List<Integer> thisLayer = new ArrayList<>();
        for(int i = 0 ; i < tmp.size() ; i++ ){
            //collect this layer's value
            thisLayer.add(tmp.get(i).val);
            //collect next layer's node
            if((tmp.get(i).left != null)){
                _tmp.add((tmp.get(i).left));
            }
            if((tmp.get(i).right != null)){
                _tmp.add((tmp.get(i).right));
            }
        }
        collector.add(thisLayer);
        return _tmp;
    }
}

执行结果的效率能排到60%:

Paste_Image.png

相关文章

网友评论

      本文标题:[leetcode]102 Binary Tree Level

      本文链接:https://www.haomeiwen.com/subject/wbwglttx.html