zoukankan      html  css  js  c++  java
  • Binary Tree Zigzag Level Order Traversal

     

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

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

        3
       / 
      9  20
        /  
       15   7
    

    return its zigzag level order traversal as:

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

    这道题主要用BFS解决,在BFS得到结果后需要考虑是否要逆序一下。逆序可以考虑用栈,我没有用栈,直接逆序
    public class Solution {
        public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
            List<List<Integer>> result = new ArrayList<List<Integer>>();			//保存最后的结果
            if(null == root)
            	return result;
            boolean needReverse = false;												//是否要对列表中的内容进行逆序
            Queue<TreeNode> queue = new LinkedList<TreeNode>();						//BFS要使用到的队列
            queue.add(root);														//根节点入队
            while(!queue.isEmpty()){												//队列不为空
            	List<Integer> oneLevel = new ArrayList<Integer>();					//保存在同一层及节点的值
            	Queue<TreeNode> temp = new LinkedList<TreeNode>();					//存放下一层的节点
            	while(!queue.isEmpty()){
            		TreeNode headOfQueue = queue.remove();							//对头元素出队
            		oneLevel.add(headOfQueue.val);
            		if(headOfQueue.left != null)
            			temp.add(headOfQueue.left);									//左子树不为空,入队
            		if(headOfQueue.right != null)
            			temp.add(headOfQueue.right);								//右子树不为空,入队
            	}//while
            	if(needReverse)
            		reverseList(oneLevel);
            	result.add(oneLevel);
            	needReverse = !needReverse;
            	queue = temp;
            }
            return result;
        }
        
        /**
         * list列表中内容逆序
         * @param list
         */
        private void reverseList(List<Integer> list){
        	for(int i = 0, j = list.size() - 1; i < j; i++, j--){
        		int temp = list.get(i);
        		list.set(i, list.get(j));
        		list.set(j, temp);
        	}
        }
    }
    

      



  • 相关阅读:
    python smtplib email
    python merry -- error handling in the real world
    python os.path
    python logging
    Python演讲笔记1
    python DBUtils.PooledDB 中 maxcached 和 maxconnections
    Effective Python2 读书笔记3
    Effective Python2 读书笔记2
    MVC验证session是否过期,在每个action执行之前验证
    int类型的正负数转换
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4194322.html
Copyright © 2011-2022 走看看