zoukankan      html  css  js  c++  java
  • LeetCode 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,null,null,15,7],

        3
       / 
      9  20
        /  
       15   7
    

    return its zigzag level order traversal as:

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

    解题方法

    方法一

    • 利用栈来实现,将每一层的节点压入栈中,然后通过迭代遍历出每一层节点中的值并加入答案中,通过取模2判断是否正序或逆序
    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    # 利用栈迭代
    class Solution(object):
        def zigzagLevelOrder(self, root):
            """
            :type root: TreeNode
            :rtype: List[List[int]]
            """
            if root == None:
                return []
            stack, ret = [root], []
            dep = 0
            while stack:
                level_value = []
                next_level = []
                for node in stack:
                    level_value.append(node.val)
                    if node.left:
                        next_level.append(node.left)
                    if node.right:
                        next_level.append(node.right)
                if dep % 2 == 0:
                    ret.append(level_value)
                else:
                    ret.append(level_value[::-1])
                stack = next_level
                dep += 1
            return ret
                    
                 
            
    
                    
                    
    

      

    方法二

    • 利用双向队列求解,解题思路跟方法一类似
    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
                    
    # 利用双向队列  
    # Your runtime beats 90.20 % of python submissions.
    class Solution(object):
        def zigzagLevelOrder(self, root):
            """
            :type root: TreeNode
            :rtype: List[List[int]]
            """
            if root == None:
                return []
            DQ = collections.deque()
            DQ.append(root)
            ret = []
            flag = True
            while DQ:
                length = len(DQ)
                level_value = []
                for i in xrange(length):
                    node = DQ.popleft()
                    if node.left:
                        DQ.append(node.left)
                    if node.right:
                        DQ.append(node.right)
                    if flag:
                        level_value.append(node.val)
                    else:
                        level_value = [node.val] + level_value
                ret.append(level_value)
                flag = not flag
            return ret
            
    
                    
                    
    

      

  • 相关阅读:
    mq概念
    Mac Xampp 安装redis 及 安装php-redis扩展
    rabbitmq死信队列(延迟队列)demo
    rabbitmq生产与消费测试
    RabbitMQ各方法详解
    Mac git old mode 100644 new mode 100755 mac目录权限问题
    mac安装redis
    msql创建用户并授权
    mac apache php 访问失败
    Kubernetes入门学习--在Ubuntu16.0.4安装配置Minikube
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6902775.html
Copyright © 2011-2022 走看看