“之”字形输出二叉树即第1层从左到右输出,第2层从右到左输出,第3层从左到右输出......第2*n层从右到左输出,第2*n+1层从左到右输出,如下图所示二叉树,“之”字形输出的结果为:1-3-2-4-5-6-7。如果将从左到右输出定义为正向输出,那么奇数层为正向输出,偶数层为反向输出,因此可以通过判断输出输出层数的奇偶性判断输出方向,但实际上奇数层与偶数层交替出现,因此只需设置一个标志变量,每遍历一层,就将标志变量取反即可。程序中除了一个列表遍历到的节点的值,还需要两个临时列表,一个用于存放最新遍历的层次节点,然后对这些节点的子节点继续遍历存入另一个列表,按照标志变量的值,将该列表正向或反向存入结果。

具体代码

class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
#之字形输出二叉树
def Print(self, pRoot):
# write code here
if not pRoot:
return None
q=[[pRoot.val]]#最后结果
reverse=False#输出方向的标志变量
tmp2=[]
tmp1=[pRoot.left,pRoot.right]#父节点层
tmp1=list(filter(lambda c: c is not None,tmp1))#过滤掉空节点
if tmp1:
q.append([node.val for node in tmp1[::-1]])
while 1:
#先按照正向遍历下一层,然后根据reverse的值,将遍历结果存入q
while tmp1:
node=tmp1.pop(0)
if node.left:
tmp2.append(node.left)
if node.right:
tmp2.append(node.right)
if not tmp2:
break
if reverse:
q.append([node.val for node in tmp2[::-1]])
else:
q.append([node.val for node in tmp2])
reverse= not reverse#下一层的输出方向改变
tmp1=tmp2
tmp2=[]
return q

“之”字形输出二叉树 python的更多相关文章

  1. 【剑指offer】之字形打印二叉树,C++实现

    原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打 ...

  2. leetcode1028 从先序遍历还原二叉树 python 100%内存 一次遍历

    1028. 从先序遍历还原二叉树 python 100%内存 一次遍历     题目 我们从二叉树的根节点 root 开始进行深度优先搜索. 在遍历中的每个节点处,我们输出 D 条短划线(其中 D 是 ...

  3. 【easy】107. Binary Tree Level Order Traversal II 按层输出二叉树

    按层输出二叉树,广度优先. 3 / \ 9 20 / \ 15 7 [ [15,7], [9,20], [3] ] /** * Definition for a binary tree node. * ...

  4. [Swift]LeetCode655. 输出二叉树 | Print Binary Tree

    Print a binary tree in an m*n 2D string array following these rules: The row number m should be equa ...

  5. 《剑指offer》第三十二题(之字形打印二叉树)

    // 面试题32(三):之字形打印二叉树 // 题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺 // 序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印, / ...

  6. Leetcode 655.输出二叉树

    输出二叉树 在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则: 行数 m 应当等于给定二叉树的高度. 列数 n 应当总是奇数. 根节点的值(以字符串格式给出)应当放在可放置的第一行正中间. ...

  7. 列表[‘hello’ , ‘python’ ,’!’ ] 用多种方法拼接,并输出’hello python !’ 以及join()在python中的用法简介

    列表[‘hello’ , ‘python’ ,’!’ ] 用多种方法拼接,并输出’hello python !’ 使用字符串链接的四种方法都可以创建 字符串拼接一共有四种方法,也可以应用到列表的拼接中 ...

  8. 剑指offer:按之字形打印二叉树(栈|双向队列+中序遍历)

    1. 题目描述 /** 请实现一个函数按照之字形打印二叉树, 即第一行按照从左到右的顺序打印, 第二层按照从右至左的顺序打印, 第三行按照从左到右的顺序打印, 其他行以此类推. */ 2. 双向队列 ...

  9. Go语言实现:【剑指offer】按之字形打印二叉树

    该题目来源于牛客网<剑指offer>专题. 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. ...

随机推荐

  1. HBase1.2.0增删改查Scala代码实现

    增删改查工具类 class HbaseUtils { /** * 获取管理员对象 * * @param conf 对hbase client配置一些参数 * @return 返回hbase的HBase ...

  2. kernel内核配置说明

    内核过程中的配置这一步做详细的说明吧,总结一下,多数内容源于网上的多篇文章. 首先,配置时可能出现的选项,对其选择先来个说明吧. Typically, your choices for each op ...

  3. java序列化与反序列化(转)

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  4. linux rsync安装与使用

    rsync Usage: /etc/init.d/rsync {start|stop|reload|force-reload|restart|status} rsync默认配置文件 # default ...

  5. 小型网站MYSQL问题二:Percona Xtrabackup实现数据库备份和恢复

    1.安装软件仓库(不要问我为什么不用源码安装,好吧,其实我懒.) 1 2 3 4 5 6 7 8 wget https://www.percona.com/downloads/percona-rele ...

  6. malloc calloc realloc 区别

    (1)C语言跟内存分配方式 <1>从静态存储区域分配.       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...

  7. web服务器配置实践

    1.为linux系统分配IP地址:192.168.X.1/24,客户端XP系统IP地址为:192.168.X.2/24,其主要DNS指定为:192.168.X.1. 2.查询本机是否安装了httpd服 ...

  8. ACM ICPC, Amman Collegiate Programming Contest (2018) Solution

    Solution A:Careful Thief 题意:给出n个区间,每个区间的每个位置的权值都是v,然后找长度为k的区间,使得这个区间的所有位置的权值加起来最大,输出最大权值, 所有区间不重叠 思路 ...

  9. hdu 5185 动态规划 分析降低复杂度

    这题说的是 x[1]+x[2]+x[3]+…+x[n]=n, 这里 0 <= x[i] <= n && 1 <= i <= n x[i] <= x[i+1 ...

  10. [转][修]sprintf()函数:将格式化的数据写入字符串

    头文件:#include <stdio.h>功能:用于将格式化的数据写入字符串 原型:int sprintf(char *str, char * format [, argument, . ...