剑指offer-顺序打印二叉树节点(系列)-树-python
转载自 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的更多相关文章
- 【剑指Offer】序列化二叉树 解题报告(Python)
[剑指Offer]序列化二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- 【剑指Offer】按之字形顺序打印二叉树 解题报告(Python)
[剑指Offer]按之字形顺序打印二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- 【剑指Offer】把二叉树打印成多行 解题报告(Python)
[剑指Offer]把二叉树打印成多行 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 剑指Offer:重建二叉树【7】
剑指Offer:重建二叉树[7] 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5 ...
- 剑指offer——已知二叉树的先序和中序排列,重构二叉树
这是剑指offer中关于二叉树重构的一道题.题目原型为: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2, ...
- 《剑指offer》重建二叉树
本题来自<剑指offer> 重构二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2 ...
- 剑指 Offer 68 - II. 二叉树的最近公共祖先 + 最近公共祖先(LCA)
剑指 Offer 68 - II. 二叉树的最近公共祖先 Offer_68_2 题目详情 题解分析 java代码 package com.walegarrett.offer; /** * @Autho ...
- 力扣 - 剑指 Offer 37. 序列化二叉树
目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...
- 剑指 Offer 68 - II. 二叉树的最近公共祖先
剑指 Offer 68 - II. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近 ...
随机推荐
- 全方面了解和学习PHP框架 PHP培训教程
PHP成为最流行的脚本语言有许多原因:灵活性,易用性等等.对于项目开发来说,我们通常需要一个PHP框架来代替程序员完成那些重复的部分.本文,兄弟连将对PHP框架进行全面解析. PHP框架是什么? PH ...
- jquery contains选择器 语法
jquery contains选择器 语法 作用::contains 选择器选取包含指定字符串的元素.该字符串可以是直接包含在元素中的文本,或者被包含于子元素中.经常与其他元素/选择器一起使用,来选择 ...
- 牛客网 Chess ( 博弈 && 奇异局势 )
题目链接 分析 : 发现如果一开始就在边界或者位于对角线的位置上肯定是必胜态 从终点逆推,画出胜负表格,填一填,就会发现和奇异局势的前几项一样 然后打个奇异局势的表就能 AC 了 #include&l ...
- luogu P1063 能量项链 x
P1063 能量项链 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子, ...
- java 根据省份证号-判断省份-性别-生日
package com.nf147.manage.Test; import java.text.ParseException; import java.text.SimpleDateFormat; i ...
- 通过构造器配置Bean
public class Role { private Log id; private String roleName; private String note; public Role(String ...
- 微信小程序 API 数据缓存
微信小程序 数据缓存 (类似于 cookie) wx.setStorage() 将数据存储在本地缓存中制定的 key 中.会覆盖掉原来该 key 对应的内容,数据存储生命周期跟小程序本身一致,即除用户 ...
- mysql语句错误
select * from order where id = 1; 同学问我这句话有什么问题,乍一看真看不出毛病,后来发现order是mysql关键字,这样写是不对的,所以要加一个双引号才会更好一点 ...
- 技术文档翻译-------glove readme(1)
Package Contents To train your own GloVe vectors, first you tools. An example is included in demo.sh ...
- P1364 医院设置 (补锅,memset初始化较大值不可用0x7fffffff )
P1364 医院设置 题解 弗洛伊德水过 注意初始化一个大数 0x3f 可以,0x5f 好像也可以,但是0x7fffffff 我是真的炸了,初始化为-1 (后面补锅有详细解释) 代码 #include ...