'''树的构造

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数据结构之树(二叉树的遍历)相关推荐

  1. python tree结构_Python入门篇-数据结构树(tree)篇

    Python入门篇-数据结构树(tree)篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.树概述 1>.树的概念 非线性结构,每个元素可以有多个前躯和后继 树是n(n& ...

  2. python数据结构推荐书-「算法与数据结构」从入门到进阶吐血整理推荐书单

    推荐一下「算法与数据结构」从入门到进阶的书单. 一.入门系列 这些书籍通过图片.打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现, ...

  3. python数据结构推荐书-自己想学数据结构,有大佬能推荐一下看什么书吗?

    数据结构就是你的工具箱,这些工具箱帮你把同类的信息装到了一起,同时还提供给你操作这些信息的各种便捷方法. 数据结构是计算机中的重中之重,而且数据结构一般和算法结合比较紧密,加上,数据结构和算法往往是算 ...

  4. 《数据结构与算法》——树与二叉树之遍历总结

    <数据结构与算法>--树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用. 目录 & ...

  5. 数据结构与算法——24. 树的应用:表达式解析树

    文章目录 一.解析树 二.解析树实例:表达式解析 1. 建立表达式解析树 (1)建立表达式解析树的规则 (2)建立表达式解析树的思路 (3)python代码实现 2. 表达式解析树的求值 (1)增加程 ...

  6. 数据结构与算法笔记(十三)—— 树与树的算法

    一.树的概念 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构, 用来模拟具有树状结构性质的数据集合.它是由 n(n>=1)个有限节点组成一个具有层次关 系的集 ...

  7. 路径前缀是什么意思_Trie 树是什么样的数据结构?有哪些应用场景?

    (给算法爱好者加星标,修炼编程内功) 作者:神奕 blog.csdn.net/lisonglisonglisong/article/details/45584721 [前言]在计算机科学中,trie, ...

  8. 数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树

    数据结构与算法之判断一棵树是否为搜索二叉树.判断一棵树是否是完全二叉树 目录 判断一棵树是否为搜索二叉树 判断一棵树是否是完全二叉树 1. 判断一棵树是否为搜索二叉树 概念:搜索树就是中序遍历的结果是 ...

  9. 数据结构与算法--面试必问AVL树原理及实现

    数据结构与算法–AVL树原理及实现 AVL(Adelson-Velskii 和landis)树是带有平衡条件的二叉查找树,这个平衡条件必须容易实现,并且保证树的深度必须是O(logN).因此我们让一棵 ...

最新文章

  1. virtualbox 虚拟机没有ipv4
  2. 斯坦福大学机器学习第一课“引言(Introduction)”
  3. 一个小技巧助您减少if语句的状态判断
  4. 插入脚注把脚注标注删掉_地狱司机不应该只是英国电影历史数据中的脚注,这说明了为什么...
  5. 7004.vue脚手架快速生成项目
  6. Jenkins:项目配置
  7. 【写作技巧】毕业论文格式要求
  8. 【iCore3双核心板】iCore3双核心板使用说明(图文)
  9. android 盒子dns设置,电视盒修改DNS,让你的上网速度更快!
  10. “易班”学生管理平台小项目 万字总结 泪目!!!
  11. 健美运动员赛前脱水断碳_健美运动员在备赛期状态真的很差吗?
  12. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day33】—— 手撸算法2
  13. seo关键词优化技巧是什么
  14. University Code
  15. LeetCode 134. 加油站(C++)
  16. C语言阶段小项目(火车购票系统)
  17. python里的π怎么输入_【后端开辟】python里的π怎样输入
  18. [转载]惯性导航专业相关书籍180多部
  19. js判断数据类型常用的四种方法
  20. java 慕课 结题报告_[转载]微课组:小课题研究结题报告

热门文章

  1. 2011东北地区赛G题(二分-网络流判可行性)
  2. 分析mrp主要应用范围_超滤膜的应用范围分析
  3. mysql水平拆分 hash_常用的数据库表水平拆分方案
  4. 2022年1月国产数据库排行榜:TiDB霸榜两年势头不减,openGauss与OceanBase分数大涨...
  5. 数据库大咖解读“新基建”,墨天轮四重好礼相送!
  6. 连载二:Oracle迁移文章大全
  7. JS对象拷贝:深拷贝和浅拷贝
  8. 从前世今生聊一聊,大厂为啥亲睐时序数据库
  9. 一瓶可乐的自动售货机指令“旅程”
  10. 【我的物联网成长记17】一条物联网设备控制命令的一生