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

leetcode_107_Binary Tree Level Order Traversal II

时间:2015-03-20 14:25:18      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:binary tree   level order traversa   botom   

描述:

Given a binary tree, return the bottom-up level order traversal of its nodes‘ values. (ie, from left to right, level by level from leaf to root).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   /   9  20
    /     15   7

return its bottom-up level order traversal as:

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

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}".

思路:

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

代码:

/**
 * 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>> levelOrderBottom(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;
       }
       int len=list.size();
       int num=len-1;
       len/=2;
       for(int i=0;i<len;i++)//交换位置
       {
    	   subList=list.get(i);
    	   list.set(i,list.get(num-i));
    	   list.set(num-i,subList);
       }
       return list;
	}
}


结果:技术分享

leetcode_107_Binary Tree Level Order Traversal II

标签:binary tree   level order traversa   botom   

原文地址:http://blog.csdn.net/mnmlist/article/details/44491277

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