zoukankan      html  css  js  c++  java
  • 103. 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]
    ]

    链接: http://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/

    题解:

    跟level order traversal一样,只不过多了一个flag来判断添加元素的顺序。

    Time Complexity - O(n), Space Complexity - O(n).

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
            List<List<Integer>> res = new ArrayList<>();
            if(root == null)
                return res;
            ArrayList<Integer> list = new ArrayList<>();
            Queue<TreeNode> q = new LinkedList<>();
            q.offer(root);
            int curLevel = 1, nextLevel = 0;
            boolean zigZagFlag = true;
            
            while(!q.isEmpty()) {
                TreeNode node = q.poll();
                if(zigZagFlag)
                    list.add(node.val);
                else
                    list.add(0, node.val);
                curLevel--;
                if(node.left != null) {
                    q.offer(node.left);
                    nextLevel++;
                }
                if(node.right != null) {
                    q.offer(node.right);
                    nextLevel++;
                }
                if(curLevel == 0) {
                    curLevel = nextLevel;
                    nextLevel = 0;
                    res.add(new ArrayList<Integer>(list));
                    list.clear();
                    zigZagFlag = !zigZagFlag;
                }
            }
            
            return res;
        }
    }

    二刷:

    注意要写得流畅。   有一个boolean变量 zigzag来确定合适按照正序 / 逆序 添加结果到每一个level的list里。

    Java:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
            List<List<Integer>> res = new ArrayList<>();
            if (root == null) return res;
            List<Integer> list = new ArrayList<>();
            Queue<TreeNode> q = new LinkedList<>();
            q.offer(root);
            int curLevel = 1, nextLevel = 0;
            boolean zigzag = true;
            
            while (!q.isEmpty()) {
                TreeNode node = q.poll();
                if (zigzag) list.add(node.val);
                else list.add(0, node.val);
                curLevel--;
                if (node.left != null) {
                    q.offer(node.left);
                    nextLevel++;
                }
                if (node.right != null) {
                    q.offer(node.right);
                    nextLevel++;
                }
                if (curLevel == 0) {
                    curLevel = nextLevel;
                    nextLevel = 0;
                    res.add(new ArrayList<>(list));
                    list.clear();
                    zigzag = !zigzag;
                }
            }
            return res;
        }
    }

    测试:

  • 相关阅读:
    【HTML5】html5在ie8及以下的兼容性问题
    【前端】从登录框看前端
    批量插入
    Mongodb地理空间索引
    Mongodb添加地理位置索引
    记一 次docker-compose build报错
    The method's class, com.google.common.collect.FluentIterable, is available from the following locations
    如果在chrome的新标签中继续打开开发工具
    设置idea 2018 的vmoptions无效
    spring boot(2):activiti整合
  • 原文地址:https://www.cnblogs.com/yrbbest/p/4437292.html
Copyright © 2011-2022 走看看