数据结构----二叉树Tree和排序二叉树
二叉树
节点定义
class Node(object):
def __init__(self, item):
self.item = item
self.left = None
self.right = None
二叉树定义
class Tree(object):
def __init__(self):
self.root = None def add(self, item):
node = Node(item)
# 空树直接插入
if self.root == None:
self.root = node else:
cur_list = [self.root]
while True:
# 定义一个列表存储当前遍历节点
cur_node = cur_list.pop(0) # 当前节点左孩子为空直接插入,否则将该左孩子追加到遍历列表,以便当前节点右孩子也为非空时继续遍历下一层
if cur_node.left == None:
cur_node.left = node
break
else:
cur_list.append(cur_node.left)
# 当前节点右孩子为空直接插入,否则将该右孩子追加到遍历列表,以便继续遍历下一层
if cur_node.right == None:
cur_node.right = node
break
else:
cur_list.append(cur_node.right) # 广度遍历
def travel(self):
if not self.root:
print(None)
return None
q = [self.root]
while q:
cur_node = q.pop(0)
print(cur_node.item)
if cur_node.left:
q.append(cur_node.left)
if cur_node.right:
q.append(cur_node.right) # 深度遍历----前序遍历DLR
def dlr(self, node):
if node == None:
return
print(node.item)
self.dlr(node.left)
self.dlr(node.right) # 深度遍历----中序遍历LDR
def ldr(self, node):
if node == None:
return
self.ldr(node.left)
print(node.item)
self.ldr(node.right) # 深度遍历----后序遍历LRD
def lrd(self, node):
if node == None:
return
self.lrd(node.left)
self.lrd(node.right)
print(node.item)
二叉树使用
tree = Tree()
tree.add(1)
tree.add(2)
tree.add(3)
tree.add(4)
tree.add(5)
print("----广度遍历----")
tree.travel()
print("----深度遍历:DLR----")
tree.dlr(tree.root)
print("----深度遍历:LDR----")
tree.ldr(tree.root)
print("----深度遍历:LRD----")
tree.lrd(tree.root)
二叉树使用
排序二叉树
节点定义
class Node(object):
def __init__(self, item):
self.item = item
self.left = None
self.right = None
排序二叉树定义
class SortTree(object):
def __init__(self):
self.root = None def insert(self, item):
node = Node(item)
cur_node = self.root
if not self.root:
self.root = node
else:
while True:
if node.item < cur_node.item:
if cur_node.left == None:
cur_node.left=node
break
else:
cur_node=cur_node.left
else:
if cur_node.right == None:
cur_node.right=node
break
else:
cur_node=cur_node.right # 广度遍历
def travel(self):
if not self.root:
print(None)
return None
q = [self.root]
while q:
cur_node = q.pop(0)
print(cur_node.item)
if cur_node.left:
q.append(cur_node.left)
if cur_node.right:
q.append(cur_node.right) # 深度遍历----前序遍历DLR
def dlr(self, node):
if node == None:
return
print(node.item)
self.dlr(node.left)
self.dlr(node.right) # 深度遍历----中序遍历LDR
def ldr(self, node):
if node == None:
return
self.ldr(node.left)
print(node.item)
self.ldr(node.right) # 深度遍历----后序遍历LRD
def lrd(self, node):
if node == None:
return
self.lrd(node.left)
self.lrd(node.right)
print(node.item)
排序二叉树使用
tree=SortTree()
tree.insert(1)
tree.insert(30)
tree.insert(8)
tree.insert(20)
tree.ldr(tree.root)
排序二叉树使用
数据结构----二叉树Tree和排序二叉树的更多相关文章
- 【C#数据结构系列】树和二叉树
线性结构中的数据元素是一对一的关系,树形结构是一对多的非线性结构,非常类似于自然界中的树,数据元素之间既有分支关系,又有层次关系.树形结构在现实世界中广泛存在,如家族的家谱.一个单位的行政机构组织等都 ...
- "排序二叉树"之探幽
/*怎么理解排序二叉树呢?在二叉树的基本定义上增加两个基本条件: (1)所有左子树的节点数值都小于此节点的数值: (2)所有右节点的数值都大于此节点的数值. */ 1 /*************** ...
- c++(排序二叉树)
前面我们讲过双向链表的数据结构.每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节点,这样所有的节点像一颗颗珍珠一样被一根线穿在了一起.然而今天我们讨论的数据结构却有一点不同,它有三个节点 ...
- Java编程的逻辑 (42) - 排序二叉树
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL
树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构. a.树是n ...
- javascript/js实现 排序二叉树数据结构 学习随笔
二叉树是一种数据结构.其特点是: 1.由一系列节点组成,具有层级结构.每个节点的特性包含有节点值.关系指针.节点之间存在对应关系. 2.树中存在一个没有父节点的节点,叫做根节点.树的末尾存在一系列没有 ...
- 【数据结构&算法】11-树基础&二叉树遍历
目录 前言 树的定义 树的存储结构 双亲表示法 孩子表示法 孩子兄弟表示法 二叉树 定义 特点 形态 特殊二叉树 斜树 满二叉树 完全二叉树 二叉树的性质 二叉树的存储结构 二叉树的顺序存储结构 二叉 ...
- c++(排序二叉树线索化)
前面我们谈到了排序二叉树,还没有熟悉的同学可以看一下这个,二叉树基本操作.二叉树插入.二叉树删除1.删除2.删除3.但是排序二叉树也不是没有缺点,比如说,如果我们想在排序二叉树中删除一段数据的节点怎么 ...
- LeetCode:145_Binary Tree Postorder Traversal | 二叉树后序遍历 | Hard
题目:Binary Tree Postorder Traversal 二叉树的后序遍历,题目要求是采用非递归的方式,这个在上数据结构的课时已经很清楚了,二叉树的非递归遍历不管采用何种方式,都需要用到栈 ...
随机推荐
- golang/beego 微信模版消息
// GO的微信SDK我用的是这个:https://github.com/silenceper/wechat // 发送模版消息 // UserNickName,UserMobile是发起预约的人的昵 ...
- /sbin/mount.vboxsf: mounting failed with the error: Protocol error
公司换了新电脑,需要把之前的虚拟机的配置全部备份下来,在移动的过程中挂载共享文件夹时候出现了 /sbin/mount.vboxsf: mounting failed with the error: P ...
- wait,waitpid的学习使用
man wait man waitpid 从中可知 函数原型 pid_t wait(int* status); pid_t waitpid(pid_t pid, int* status, int op ...
- RSA,AES加解密算法的实现
目录 Python实现RSA公钥加密算法 RSA公钥加密算法原理 RSA算法的Python实现 AES加解密算法实现 AES加解密算法原理 AES加解密算法Python实现 参考文献 Python实现 ...
- Task Scheduler Error Message: 80041318
Using the error lookup tool that comes with VC++ (errlook.exe, or "Error Lookup" on the To ...
- 6.Python中内存是如何管理的?
Python中内存是如何管理的? Python memory is managed by Python private heap space. All Python objects and data ...
- 短视频sdk:选择一个靠谱的短视频SDK 你需要了解这些
2017 年,短视频成为了内容创业的新风口,各种短视频 App 如雨后春笋般先后上线.随着互联网内容消费升级,视频越来越像文字.图片一样,成为每一个 App 不可或缺的一部分. 为了能够更好地聚焦于业 ...
- Java网络编程从入门到精通(27):关闭服务端连接
在客户端和服务端的数据交互完成后,一般需要关闭网络连接.对于服务端来说,需要关闭Socket和ServerSocket. 在关闭Socket后,客户端并不会马上感知自已的Socket已经关闭,也就是说 ...
- zabbix监控hbase
项目地址:https://github.com/Staroon/zabbix-hadoop-template/tree/master/hbase-master-template (1).下载脚本,将其 ...
- CTF-Reverse-[GXYCTF2019]luck_guy
CTF-Reverse-[GXYCTF2019]luck_guy 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与 ...