转载自  https://blog.csdn.net/u010005281/article/details/79761056 非常感谢!

首先创建二叉树,然后按各种方式打印:

class treeNode:
def __init__(self, x):
self.left = None
self.right = None
self.val = x class Solution: # 给定二叉树的前序遍历和中序遍历,获得该二叉树
def getBSTwithPreTin(self, pre, tin):
if not pre or not tin:
return None
root = treeNode(pre[0])
for order, item in enumerate(tin):
if root.val == item:
root.left = self.getBSTwithPreTin(pre[1:order + 1], tin[:order])
root.right = self.getBSTwithPreTin(pre[order + 1:], tin[order + 1:])
return root #从上往下打印出二叉树的每个节点,同层节点从左至右打印
#使用队列先进先出来依次打印
def PrintFromTopToBottom(self, root):
array = []
result = []
if root == None:
return result
#root为根,其值为根节点的值
array.append(root)
while array:
newNode = array.pop(0)
result.append(newNode.val)
if newNode.left != None:
array.append(newNode.left)#先放左边
if newNode.right != None:
array.append(newNode.right)
return result #从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
def Print(self, pRoot):
if not pRoot:
return []
resultList = []
curLayer = [pRoot]
count = 0
while curLayer:
curList = []
nextLayer = []
for node in curLayer:
curList.append(node.val)
if node.left:
nextLayer.append(node.left)
if node.right:
nextLayer.append(node.right)
if count // 2 == 0:
curList.reverse()
resultList.append(curList)
curLayer = nextLayer return resultList #请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,
#第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 #方式1:
#1. 按序获取每一层节点的值;
# 2. 将偶数层节点的值倒序。
def PrintZ_1(self, pRoot):
# write code here
if pRoot == None:
return []
cur_layer = [pRoot]
res = []
isEvenLayer = True
while cur_layer:
curlist = []
nextlayer = []
isEvenLayer = not isEvenLayer #是否倒叙
for node in cur_layer:
curlist.append(node.val)
if node.left:
nextlayer.append(node.left)
if node.right:
nextlayer.append(node.right)
if isEvenLayer == False:
res.append(curlist)
else:
res.append(curlist[::-1])
cur_layer = nextlayer
return res #方式2:
# 获取每一层的节点的值时,如果是偶数层,则将每个节点的值插入到列表的头部,
# 即实现了获取节点值时如果是偶数层则倒序排列的效果:
def PrintZ_2(self, pRoot):
# write code here
if pRoot == None:
return []
cur_layer = [pRoot]
res = []
isEvenLayer = True
while cur_layer:
curlist = []
nextlayer = []
isEvenLayer = not isEvenLayer # 是否倒叙
for node in cur_layer:
if isEvenLayer == False:
curlist.append(node.val)
else:
curlist.insert(0,node.val) if node.left:
nextlayer.append(node.left)
if node.right:
nextlayer.append(node.right)
res.append(curlist)
cur_layer = nextlayer
return res if __name__ == '__main__':
# flag = "printTreeNode"
# flag = "printTreeNode_line"
# flag = "printTreeNode_Z1"
flag = "printTreeNode_Z2"
solution = Solution()
preorder_seq = [1, 2, 4, 7, 3, 5, 6, 8]
middleorder_seq = [4, 7, 2, 1, 5, 3, 8, 6]
treeRoot1 = solution.getBSTwithPreTin(preorder_seq, middleorder_seq)
if flag == "printTreeNode":
newArray = solution.PrintFromTopToBottom(treeRoot1)
print(newArray)
elif flag == "printTreeNode_line":
newArray = solution.Print(treeRoot1)
print(newArray)
elif flag == "printTreeNode_Z1":
newArray = solution.PrintZ_1(treeRoot1)
print(newArray)
else:
newArray = solution.PrintZ_2(treeRoot1)
print(newArray)

剑指offer-顺序打印二叉树节点(系列)-树-python的更多相关文章

  1. 【剑指Offer】序列化二叉树 解题报告(Python)

    [剑指Offer]序列化二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...

  2. 【剑指Offer】按之字形顺序打印二叉树 解题报告(Python)

    [剑指Offer]按之字形顺序打印二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  3. 【剑指Offer】把二叉树打印成多行 解题报告(Python)

    [剑指Offer]把二叉树打印成多行 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  4. 剑指Offer:重建二叉树【7】

    剑指Offer:重建二叉树[7] 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5 ...

  5. 剑指offer——已知二叉树的先序和中序排列,重构二叉树

    这是剑指offer中关于二叉树重构的一道题.题目原型为: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2, ...

  6. 《剑指offer》重建二叉树

    本题来自<剑指offer> 重构二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2 ...

  7. 剑指 Offer 68 - II. 二叉树的最近公共祖先 + 最近公共祖先(LCA)

    剑指 Offer 68 - II. 二叉树的最近公共祖先 Offer_68_2 题目详情 题解分析 java代码 package com.walegarrett.offer; /** * @Autho ...

  8. 力扣 - 剑指 Offer 37. 序列化二叉树

    目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...

  9. 剑指 Offer 68 - II. 二叉树的最近公共祖先

    剑指 Offer 68 - II. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近 ...

随机推荐

  1. php+大文件上传

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...

  2. [jvm学习笔记]-类加载过程

    JVM类加载的过程 加载=>验证=>准备=>解析=>初始化 5个阶段所执行的具体动作 加载 在加载阶段,虚拟机需要完成3个事情1.通过一个类的全限定名获取定义此类的二进制字节流 ...

  3. selenium安装环境

    selenium自动化环境:selenium+python+chromedriver 驱动/ ie驱动/火狐驱动 1.selenium和python安装   cmd命令里输入:pip install ...

  4. 如何解决两个相邻的span中间有空隙

    span中间不要有换行.或者空格 或者在样式上加上float:left

  5. vue基于element-ui的三级CheckBox复选框

    最近vue项目需要用到三级CheckBox复选框,需要实现全选反选不确定三种状态.但是element-ui table只支持多选行,并不能支持三级及以上的多选,所以写了这篇技术博文供以后学习使用. 效 ...

  6. jdbcType="DATE"和jdbcType=" TIMESTAMP"的区别

    原文: https://www.cnblogs.com/fswhq/p/jdbcType.html 当传入null值时,jdbcType 会防止null空指针异常报错 Mybatis 中jdbcTyp ...

  7. npm-package-lock.json

    npm notice created a lockfile as package-lock.json. You should commit this file. https://docs.npmjs. ...

  8. C#调用windows API实现 smallpdf客户端程序进行批量压缩

    一.背景 Smallpdf 网站针对PDF文件提供了非常齐全的功能:PDF 与 Word.PPT.Excel.JPG 的相互转化.PDF 的压缩.编辑.合并.分割.解密.加密等功能,用户无需注册即可免 ...

  9. CListCtrl死锁的问题

    ON_COMMAND(ID_DELETE_1,OnDelete)在响应删除事件的时候 控件应该内部有锁,在这个时候调用GetItemCount()函数会阻塞

  10. hdu 6219 Empty Convex Polygons (凸包)

    给你n个点,求面积最大的凸多边形,使得这个凸多边形没有内点. 考虑求凸包的graham算法,需要找到左下角的点,再进行极角排序后按顺序扫点,所以先枚举左下角的点. 这个过程中,如果遇到内点,就需要把这 ...