转载自  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. Q15格式表示负小数

    1.用Q15.16-bit格式,表示出-0.5? 解析:其实很简单,Q15是dsp里为了优化浮点的,就是将小数* 2^15. 例如:0.333 * 32768 = 10911.744  取整数就是10 ...

  2. mysql jdbcTemplate访问

    String sql = "select * from xxx_photo_info where user_id in (:userIds)"; userIds从dao传过来时必须 ...

  3. Mac 安装 MongoDB 数据库

    1. 使用 brew install mongodb 安装 (参见下图) 2. 安装成功如下图 (成功与否可参考 方框内字符) 3. 启动 MongoDB 数据库 3.1 先创建数据库存储目录 /da ...

  4. SQL Server 2012 sa 用户登录 18456 错误 (转)

    转自:http://blog.csdn.net/waterxcfg304/article/details/40617475 最近想研究下SQL SERVER2012 Enterprise版本的数据库, ...

  5. 关于文件属性(Java)

    1.编写一个程序,指定一个文件夹,能自动计算出其总容量 import java.io.File; import java.util.ArrayList; public class FileAction ...

  6. java jdk原生的http请求工具类

    package com.base; import java.io.IOException; import java.io.InputStream; import java.io.InputStream ...

  7. 听说你还不理解JavaScript闭包

    闭包(Closure) 闭包是一个函数和词法环境的组合,函数声明在这个词法环境中 词法作用域 看下面一个例子 function init() { var name = 'Mozilla'; // na ...

  8. iframe嵌套页面 跨域

    父级调用iframe方法: document.getElementById("iframe").contentWindow.func(data1,data2...) 子级 ifra ...

  9. 网络对抗技术 20165220 Exp7 网络欺诈防范

    网络对抗技术 20165220 Exp7 网络欺诈防范 实验任务 (1)简单应用SET工具建立冒名网站 (1分) (2)ettercap DNS spoof (1分) (3)结合应用两种技术,用DNS ...

  10. 【机器学习速成宝典】模型篇02线性回归【LR】(Python版)

    目录 什么是线性回归 最小二乘法 一元线性回归 多元线性回归 什么是规范化 Python代码(sklearn库) 什么是线性回归(Linear regression) 引例 假设某地区租房价格只与房屋 ...