python 数据结构 树 dev get items_python数据结构之树(二叉树的遍历)
'''树的构造
1.递归实现先序遍历、中序遍历、后序遍历
2.堆栈实现先序遍历、中序遍历、后序遍历
3.队列实现层次遍历'''
#节点类
classNode(object):__slots__ = 'item','lchild','rchild'
def __init__(self,item=None,lchild=None,rchild=None):
self.item=item
self.lchild=lchild
self.rchild=rchild#树类
classTree(object):def __init__(self):
self.root=root
self.myQueue=myQueue#添加树节点
defadd(self,item):
node=Node(item)if self.root.item == None: #空则赋值root
self.root =node
self.myQueue.append(self.root)else:
treeNode= self.myQueue[0] #该节点子树还没齐
if treeNode.lchild ==None:
treeNode.lchild=node
self.myQueue.append(treeNode.lchild)else:
treeNode.rchild=node
self.myQueue.append(treeNode.rchild)
self.myQueue.pop(0)#如果该节点在右子树,丢弃该节点
#递归实现树的先序遍历
deffront_digui(self,root):if root ==None:returnNoneprint(root.item)
self.front_digui(root.lchild)
self.front_digui(root.rchild)#递归实现树的中序遍历
defmiddle_digui(self,root):if root ==None:returnNone
self.middle_digui(root.lchild)print(root.item)
self.middle_digui(root.rchild)#递归实现树的后序遍历
deflater_digui(self,root):if root ==None:returnNone
self.later_digui(root.lchild)
self.later_digui(root.rchild)print(root.item)#利用堆栈实现树的先序遍历
deffront_stack(self, root):if root ==None:returnmyStack=[]
node=rootwhile node ormyStack:while node: #从根节点开始,一直找它的左子树
print(node.item)
myStack.append(node)
node=node.lchild
node= myStack.pop() #while结束表示当前节点node为空,即前一个节点没有左子树了
node = node.rchild #开始查看它的右子树
#利用堆栈实现树的中序遍历
defmiddle_stack(self, root):if root ==None:returnmyStack=[]
node=rootwhile node ormyStack:while node: #从根节点开始,一直找它的左子树
myStack.append(node)
node=node.lchild
node= myStack.pop() #while结束表示当前节点node为空,即前一个节点没有左子树了
printnode.item,
node= node.rchild #开始查看它的右子树
#利用堆栈实现树的后序遍历
deflater_stack(self, root):if root ==None:returnmyStack1=[]
myStack2=[]
node=root
myStack1.append(node)while myStack1: #这个while循环的功能是找出后序遍历的逆序,存在myStack2里面
node =myStack1.pop()ifnode.lchild:
myStack1.append(node.lchild)ifnode.rchild:
myStack1.append(node.rchild)
myStack2.append(node)while myStack2: #将myStack2中的元素出栈,即为后序遍历次序
print(myStack2.pop().item)#利用队列实现树的层次遍历
deflevel_queue(self, root):if root ==None:returnmyQueue=[]
node=root
myQueue.append(node)whilemyQueue:
node=myQueue.pop(0)printnode.item,if node.lchild !=None:
myQueue.append(node.lchild)if node.rchild !=None:
myQueue.append(node.rchild)#测试
if __name__ == '__main__':
items= range(10) #生成十个数据作为树节点
tree = Tree() #新建一个树对象
for item initems:
tree.add(item)#逐个添加树的节点
print('队列实现层次遍历:')
tree.level_queue(tree.root)print('\n\n递归实现先序遍历:')
tree.front_digui(tree.root)print('\n递归实现中序遍历:')
tree.middle_digui(tree.root)print('\n递归实现后序遍历:')
tree.later_digui(tree.root)print('\n\n堆栈实现先序遍历:')
tree.front_stack(tree.root)print('\n堆栈实现中序遍历:')
tree.middle_stack(tree.root)print('\n堆栈实现后序遍历:')
tree.later_stack(tree.root)
python 数据结构 树 dev get items_python数据结构之树(二叉树的遍历)相关推荐
- python tree结构_Python入门篇-数据结构树(tree)篇
Python入门篇-数据结构树(tree)篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.树概述 1>.树的概念 非线性结构,每个元素可以有多个前躯和后继 树是n(n& ...
- python数据结构推荐书-「算法与数据结构」从入门到进阶吐血整理推荐书单
推荐一下「算法与数据结构」从入门到进阶的书单. 一.入门系列 这些书籍通过图片.打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现, ...
- python数据结构推荐书-自己想学数据结构,有大佬能推荐一下看什么书吗?
数据结构就是你的工具箱,这些工具箱帮你把同类的信息装到了一起,同时还提供给你操作这些信息的各种便捷方法. 数据结构是计算机中的重中之重,而且数据结构一般和算法结合比较紧密,加上,数据结构和算法往往是算 ...
- 《数据结构与算法》——树与二叉树之遍历总结
<数据结构与算法>--树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用. 目录 & ...
- 数据结构与算法——24. 树的应用:表达式解析树
文章目录 一.解析树 二.解析树实例:表达式解析 1. 建立表达式解析树 (1)建立表达式解析树的规则 (2)建立表达式解析树的思路 (3)python代码实现 2. 表达式解析树的求值 (1)增加程 ...
- 数据结构与算法笔记(十三)—— 树与树的算法
一.树的概念 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构, 用来模拟具有树状结构性质的数据集合.它是由 n(n>=1)个有限节点组成一个具有层次关 系的集 ...
- 路径前缀是什么意思_Trie 树是什么样的数据结构?有哪些应用场景?
(给算法爱好者加星标,修炼编程内功) 作者:神奕 blog.csdn.net/lisonglisonglisong/article/details/45584721 [前言]在计算机科学中,trie, ...
- 数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树
数据结构与算法之判断一棵树是否为搜索二叉树.判断一棵树是否是完全二叉树 目录 判断一棵树是否为搜索二叉树 判断一棵树是否是完全二叉树 1. 判断一棵树是否为搜索二叉树 概念:搜索树就是中序遍历的结果是 ...
- 数据结构与算法--面试必问AVL树原理及实现
数据结构与算法–AVL树原理及实现 AVL(Adelson-Velskii 和landis)树是带有平衡条件的二叉查找树,这个平衡条件必须容易实现,并且保证树的深度必须是O(logN).因此我们让一棵 ...
最新文章
- virtualbox 虚拟机没有ipv4
- 斯坦福大学机器学习第一课“引言(Introduction)”
- 一个小技巧助您减少if语句的状态判断
- 插入脚注把脚注标注删掉_地狱司机不应该只是英国电影历史数据中的脚注,这说明了为什么...
- 7004.vue脚手架快速生成项目
- Jenkins:项目配置
- 【写作技巧】毕业论文格式要求
- 【iCore3双核心板】iCore3双核心板使用说明(图文)
- android 盒子dns设置,电视盒修改DNS,让你的上网速度更快!
- “易班”学生管理平台小项目 万字总结 泪目!!!
- 健美运动员赛前脱水断碳_健美运动员在备赛期状态真的很差吗?
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day33】—— 手撸算法2
- seo关键词优化技巧是什么
- University Code
- LeetCode 134. 加油站(C++)
- C语言阶段小项目(火车购票系统)
- python里的π怎么输入_【后端开辟】python里的π怎样输入
- [转载]惯性导航专业相关书籍180多部
- js判断数据类型常用的四种方法
- java 慕课 结题报告_[转载]微课组:小课题研究结题报告
热门文章
- 2011东北地区赛G题(二分-网络流判可行性)
- 分析mrp主要应用范围_超滤膜的应用范围分析
- mysql水平拆分 hash_常用的数据库表水平拆分方案
- 2022年1月国产数据库排行榜:TiDB霸榜两年势头不减,openGauss与OceanBase分数大涨...
- 数据库大咖解读“新基建”,墨天轮四重好礼相送!
- 连载二:Oracle迁移文章大全
- JS对象拷贝:深拷贝和浅拷贝
- 从前世今生聊一聊,大厂为啥亲睐时序数据库
- 一瓶可乐的自动售货机指令“旅程”
- 【我的物联网成长记17】一条物联网设备控制命令的一生