Binary Tree Level Order Traversal

思路:
把每一层的node放进queue里面。在下次循环的时候把queue头取出来然后再把它的子节点放进queue里面。每一次循环queue里面的节点就是当前level的节点。 进去下一次的循环的时候,queue里面会有可能包含2个level的节点,所以要在内层循环里面加一个上一个level节点数size来控制queue.poll()的次数,也就是在只pop当前层的节点。

实现:
上面说了一堆其实看代码是最清晰的:

 /**  
  * Definition of TreeNode:  
  * public class TreeNode {  
  *   public int val;  
  *   public TreeNode left, right;  
  *   public TreeNode(int val) {  
  *     this.val = val;  
  *     this.left = this.right = null;  
  *   }  
  * }  
  */  
 public class Solution {  
   /*  
    * @param root: A Tree  
    * @return: Level order a list of lists of integer  
    */  
   public List<List<Integer>> levelOrder(TreeNode root) {  
     // write your code here  
     List<List<Integer>> result = new ArrayList<>();  
     if(root == null)  
       return result;  
     Queue<TreeNode> queue = new LinkedList<TreeNode>();  
     queue.add(root);  
     while(!queue.isEmpty())  
     {  
       List<Integer> curLvl = new ArrayList<Integer>();  
       int size = queue.size();  
       for(int i=0; i < size; i++)  
       {  
         TreeNode curNode = queue.poll();  
         curLvl.add(curNode.val);  
         if(curNode.left != null)  
           queue.add(curNode.left);  
         if(curNode.right != null)  
           queue.add(curNode.right);  
       }  
       result.add(curLvl);  
     }  
     return result;  
   }  
 }  

评论

此博客中的热门博文

776. Split BST

663. Equal Tree Partition

532. K-diff Pairs in an Array