Tree-E-102. Binary Tree Level Order Traversal I and II

Tree-E-102. Binary Tree Level Order Traversal

时间 20180301


1.解法1

  本题的实质是广度优先搜索BFS,而队列可以轻松的以迭代形式实现它,不过不同于BFS的是,层序便利需要在队列中记住每一层的分割点,而BFS不关心层数只要遍历到指定元素就行了。为了记住这个分割点,我们在进入下一层之前先记下这一层的元素个数N(N其实就是当前queue的大小),然后只遍历N个节点(展开下一层节点的同时queue中会新加入很多下下一层的节点)。遍历完N个节点后记录新的层数,在进入下一层。对于II,反悔的层是逆序的,我们只要在结果中,每次把下面新一层加到当前这一层的前面就可以了。

class Solution {
    public List> levelOrder(TreeNode root) {
        //BFS的广度优先算法
        //这里使用到队列先进先出“先插入”
        //错误的写法:List is abstract; cannot be instantiated
        //List> res = new List>(); 
        //ArrayList与LinkedList的区别???
        List> res = new LinkedList>();
        //错误的写法new Queue();
        // Queue q = new Queue();
        Queue q = new LinkedList();
        
        if(root != null)q.add(root);
        
        while(!q.isEmpty()){
            //每个List中都是一个List
            List level = new LinkedList();
            //用来保存当前层中的TreeNode的个数
            int size = q.size();
            for(int i = 0; i < size; i++){
                root = q.poll();
                level.add(root.val);
                //错误没有异常处理条件if(root.left!=null)
                // q.offer(root.left);
                // q.offer(root.right);
                //queue有offer方法?
                if(root.left != null){
                    q.add(root.left);
                }
                if(root.right != null){
                    q.add(root.right);
                }
            }
            res.add(level);
        }
        return res;
    }
}
class Solution {
   public List> levelOrderBottom(TreeNode root) {
        //区别list=null和List list = new LinkedList();list为空的区别。????
       List> res = new LinkedList>();
       //List level = new LinkedList();
       
       Queue q = new LinkedList();
       if(root!=null){
          q.add(root); 
       }
       
       while(!q.isEmpty()){
           //level = null;
           List level = new LinkedList();
           int size = q.size();
           // while(size>=0){
           //     TreeNode head =  q.poll();
           //     level.add(head.val);
           //     if(head.left != null) q.add(head.left);
           //     if(head.right != null) q.add(head.right);
           //     size--;
           // }
           for(int i = 0;i

你可能感兴趣的:(Tree-E-102. Binary Tree Level Order Traversal I and II)