使用一个队、一个栈成功AC

二叉树的之字形层序遍历

http://www.nowcoder.com/questionTerminal/47e1687126fa461e8a3aff8632aa5559

使用一个队一个栈

  1. 先入队根节点

  2. 进入循环 出循环的条件为栈和队都为null时

  3. 遍历队,将左孩子入栈,再将右孩子入栈,直到栈为null

  4. 再去遍历栈,依次出栈直到栈为null,将对应元素的右孩子入队,再其次是左孩子入队

  5. 如此反复即可找到结果

    public class Solution {
     /**
      * 
      * @param root TreeNode类 
      * @return int整型ArrayList<ArrayList<>>
      */
     public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) {
         // write code here
         if(root == null){
             return new ArrayList<>();
         }
         Stack<TreeNode> stack = new Stack<>();
         LinkedList<TreeNode> queue = new LinkedList<>();
         queue.offer(root);
         ArrayList<ArrayList<Integer>> res = new ArrayList<>();
         while(!queue.isEmpty() || !stack.isEmpty()){
             ArrayList<Integer> are = new ArrayList<>();
             while(!queue.isEmpty()){
                 TreeNode tmp = queue.removeLast();
                 are.add(tmp.val);
                 if(tmp.left != null){
                     stack.push(tmp.left);
                 }
                 if(tmp.right != null){
                     stack.push(tmp.right);
                 }
             }
             res.add(are);
             are = new ArrayList<>();
             //判断队列
             while(!stack.isEmpty()){
                 TreeNode tmp = stack.pop();
                 are.add(tmp.val);
    
                 if(tmp.right != null){
                     queue.add(tmp.right);
                 }
                 if(tmp.left != null){
                     queue.add(tmp.left);
                 }
             }
             if(are.size()!=0){
                 res.add(are);
             }
         }
         return res;
     }
    }
全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务