博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于leetcode 二叉树的锯齿形层次遍历的几种解法
阅读量:4958 次
发布时间:2019-06-12

本文共 3043 字,大约阅读时间需要 10 分钟。

leetcode:

https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/

github:

https://github.com/pythonkd/python/blob/master/LeetCode/zigzagLevelOrder.py

第一种采用队列和树的层次遍历

  使用一个判断值每次遍历一层之后把该值变成原先的相反数

1 # Definition for a binary tree node. 2 # class TreeNode(object): 3 #     def __init__(self, x): 4 #         self.val = x 5 #         self.left = None 6 #         self.right = None 7 from collections import deque 8 class Solution(object): 9     def zigzagLevelOrder(self, root):10         """11         :type root: TreeNode12         :rtype: List[List[int]]13         """14         self.s = list()15         self.queue = deque()16         self.layer_trav(root)17         return self.s18     19     def layer_trav(self, subtree):20         if subtree:21             self.queue.append(subtree)22             target = 123             while self.queue:24                 tmp = list()25                 size = len(self.queue)26                 if target != 1:27                     while size > 0:28                         tree = self.queue.popleft()29                         tmp.insert(0, tree.val)30                         if tree.left:31                             self.queue.append(tree.left)32                         if tree.right:33                             self.queue.append(tree.right)34                         size -= 135                             36                 else:37                      while size > 0:38                         tree = self.queue.popleft()39                         tmp.append(tree.val)40                         if tree.left:41                             self.queue.append(tree.left)42                         if tree.right:43                             self.queue.append(tree.right)44                         size -= 145                             46                 self.s.append(tmp)47                 target = -target

时间是:28ms

第二种:是使用列表和层序遍历。然后再把列表中每层奇数次反转。

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Nonefrom collections import dequeclass Solution(object):    def zigzagLevelOrder(self, root):        """        :type root: TreeNode        :rtype: List[List[int]]        """        self.s = list()        self.queue = deque()        self.layer_trav(root)        for i, j in enumerate(self.s):            if i%2 != 0:                j.reverse()        return self.s        def layer_trav(self, subtree):        if subtree:            self.queue.append(subtree)            while self.queue:                tmp = list()                size = len(self.queue)                while size > 0:                    tree = self.queue.popleft()                    tmp.append(tree.val)                    if tree.left:                        self.queue.append(tree.left)                    if tree.right:                        self.queue.append(tree.right)                    size -= 1                self.s.append(tmp)

 

转载于:https://www.cnblogs.com/python-zkp/p/10524275.html

你可能感兴趣的文章
2.2 标识符
查看>>
孤荷凌寒自学python第五天初识python的列表
查看>>
孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库
查看>>
求一个字符串中最长回文子串的长度(承接上一个题目)
查看>>
简单权限管理系统原理浅析
查看>>
springIOC第一个课堂案例的实现
查看>>
求输入成绩的平均分
查看>>
ORACLE 数据库概述
查看>>
php PDO (转载)
查看>>
wordpress自动截取文章摘要代码
查看>>
[置顶] 一名优秀的程序设计师是如何管理知识的?
查看>>
scanf和gets
查看>>
highcharts 图表实例
查看>>
ubuntu下如何查看用户登录及系统授权相关信息
查看>>
秋季学期学习总结
查看>>
SpringBoot 优化内嵌的Tomcat
查看>>
【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
查看>>
highcharts曲线图
查看>>
extjs动态改变样式
查看>>
PL/SQL Developer 查询的数据有乱码或者where 字段名=字段值 查不出来数据
查看>>