leetcode_102_Binary Tree Level Order Traversal

来源:互联网 发布:最新手机淘宝开店教程 编辑:程序博客网 时间:2024/05/16 10:16

1.描述

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},

    3   / \  9  20    /  \   15   7

return its level order traversal as:

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

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


OJ's Binary Tree Serialization:

The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

Here's an example:

   1  / \ 2   3    /   4    \     5
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".

2.思路

一般的层序遍历直接打印出结果,用队列即可,但是此次的要求尼是按层次打印结果,所以考虑到用两个队列来交替存储,遍历上一层次的同时将下一层的结点存储到另一个队列中,并在将上面一层的遍历完成后交换两个队列的值。

3.代码

/** * Definition for binary tree * 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>>list=new ArrayList<List<Integer>>();//存储结果       if(root==null)       return list;       Queue<TreeNode>q1=new LinkedList<TreeNode>();//交替存储相邻两层的结点       Queue<TreeNode>q2=new LinkedList<TreeNode>();       Queue<TreeNode>temp=null;       List<Integer>subList=null;//存储一层的结点的值       q1.add(root);       TreeNode top=null;       while(!q1.isEmpty())       {       subList=new ArrayList<Integer>();       while(!q1.isEmpty())//循环遍历一层结点并将下一层结点存储到队列中       {       top=q1.peek();       q1.poll();       if(top.left!=null)       q2.add(top.left);       if(top.right!=null)       q2.add(top.right);       subList.add(top.val);       }       list.add(subList);       temp=q2;//交换两个队列的值,使q1一直指向要遍历的那一层       q2=q1;       q1=temp;       }       return list;}}


4.结果


0 0