leetcode(25).102. Binary Tree Level Order Traversal

来源:互联网 发布:oracle sql优化书籍 编辑:程序博客网 时间:2024/05/19 21:43

题意:给定二叉树,按层次遍历的顺序返回其值

初步分析:
用队列广度优先搜索。

其实广搜是比深搜(递归)好理解的,因为递归抽象。我们用队列来模拟广搜。队列就是先进队,先处理。我们按照从上到下,从左到右进队,取出来(即处理)的顺序任然是这样。我们只要队列不为空的时候,先处理,后放入,但是!有可能这一层的结点还没有取出来完,新一层的结点就已经进来了,因为一次取出处理一个,但是对应的却放入队列两个(如果左右都有的话),所以可能队列里有多层的,虽然他们仍然会按照顺序处理完,但是!这个题的关键在于,要区分每一层,所以,我们要对每一层循环处理!

代码:

/** * 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) {        List<List<Integer>> lists = new ArrayList<>();        if(root == null)            return lists;        Queue<TreeNode> queue = new LinkedList();        TreeNode node = root;        queue.add(node);        while(!queue.isEmpty())        {            List<Integer> list = new ArrayList<>();            int layer = queue.size();   //记录当前层的结点个数            while(layer != 0)           //把当前层的结点取出来处理完(不是整个队列处理完),处理完后队列里的结点恰好是下一层所有的结点。            {                node = queue.poll();                list.add(node.val);                if(node.left != null)                    queue.add(node.left);                if(node.right != null)                    queue.add(node.right);                layer--;            }            lists.add(list);        }        return lists;    }}


0 0
原创粉丝点击