博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(python版)《剑指Offer》JZ59:按之字形顺序打印二叉树(又名:从上到下打印二叉树 III)【附手写图解】
阅读量:4090 次
发布时间:2019-05-25

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


配合

食用更佳


在这里插入图片描述

较二代版本,主要修改 tmp.append(node.val) 这句,tmp的添加方式 要考虑奇偶层
在这里插入图片描述

先看图

在这里插入图片描述

class Solution:    def levelOrder(self, root: TreeNode) -> List[List[int]]:        if not root:            return []        res = []        deque = collections.deque([root])        while deque:            tmp = collections.deque()            for i in range(len(deque)):                node = deque.popleft()                # 这时候用那个长度来衡量这个层数?res                if len(res)%2==0:  # 当前是偶数层,那下一层是奇数层,尾插                    tmp.append(node.val)                else:           # 奇数层,那下一层是偶数层,头插                    tmp.appendleft(node.val)                if node.left:                    deque.append(node.left)                if node.right:                    deque.append(node.right)            res.append(list(tmp))        return res

注:

  1. Python 中使用 collections 中的双端队列 方便前后插入/删除

    • pop() 方法, #从队列的 右边 删除元素,并且返回删除值
    • popleft() 方法, #从队列的 左边 删除元素,并且返回删除值
    • append(n) 方法 ,#从 右边 像队列中增加元素 ,n表示增加的元素(尾插
    • appendleft(n) 方法,#从 左边 像队列中增加元素,n表示增加的元素(头插
      .
  2. 奇偶层的判断

    该程序段

    if len(res)%2==0:  # 当前是偶数层,那下一层是奇数层,尾插	tmp.append(node.val)else:           # 奇数层,那下一层是偶数层,头插    tmp.appendleft(node.val)

    可替代方案①:可换为 直接判断下一层的 奇偶

    if (len(res)+1)%2==0:  # 直接判断下一层是偶数层,头插	tmp.append(node.val)else:           # 直接判断下一层是奇数层,尾插 	tmp.appendleft(node.val)

    可替代方案②:deque还是双端队列,tmp是普通list。当前层tmp正常添加,添加到res中时,再判断奇偶层

    class Solution:def levelOrder(self, root: TreeNode) -> List[List[int]]:    if not root:        return []    res = []    deque = collections.deque([root])    while deque:        tmp = []        for i in range(len(deque)):            node = deque.popleft()            # 这时候用那个长度来衡量这个层数?res            tmp.append(node.val)                        if node.left:                deque.append(node.left)            if node.right:                deque.append(node.right)        res.append(tmp[::-1] if len(res)%2 else tmp)    return res

    切记:是 -1 才能倒着输出 tmp 到 res 中

    在这里插入图片描述

  3. 当前结果tmp要转为list列表,再添加到最终列表res中,因为此时 tmp 还是个双端队列

链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/solution/mian-shi-ti-32-iii-cong-shang-dao-xia-da-yin-er–3/

转载地址:http://myjii.baihongyu.com/

你可能感兴趣的文章
推荐一位大神,手握 GitHub 16000 star
查看>>
GitHub 上有个沙雕开发者,做了款斗图工具后火了...
查看>>
这才是真正的 Git:Git 内部原理揭秘!
查看>>
微软花2个亿做出来的软件免费用!网友:太良心了!
查看>>
硬核! 逛了 4 年 GitHub,一口气把我收藏的 Java 开源项目分享给你!
查看>>
牛逼!这家 AI 公司用面具破解了中国的人脸识别系统!微信、支付宝、火车站无一幸免...
查看>>
看完 GitHub 上这几个奇葩项目后,我忍不住笑了 233333
查看>>
她改变了编程
查看>>
B站收藏 6.1w+!GitHub 标星 3.9k+!这门神课拯救了我薄弱的计算机基础
查看>>
8 岁小学生 B 站教编程惊动苹果,库克亲自送生日祝福!
查看>>
这款开源的人脸生成器,我爱了!
查看>>
牛逼!用文言文来编程,97 年 CMU 本科生火遍全网!
查看>>
Git 使用教程:最详细、最傻瓜、最浅显、真正手把手教!(又一篇万字长文)...
查看>>
推荐一个算法大佬,手握 4.3w Star,GitHub 全球排名前 50 !
查看>>
"12306" 的架构到底有多牛逼?
查看>>
孙悟空无姓无名的时候,阎王生死簿是怎么写的呢?
查看>>
推荐几个阿里、拼多多大佬的 IT 公众号!
查看>>
涂鸦秒变动画,CMU 中国本科生让画动起来(附代码 Demo)
查看>>
面向回家编程!GitHub 标星两万的 "Python 抢票教程”,我们先帮你跑了一遍
查看>>
2019 年 JavaScript 现状调查报告火热出炉
查看>>