数据结构----二叉树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 二叉树的后序遍历,题目要求是采用非递归的方式,这个在上数据结构的课时已经很清楚了,二叉树的非递归遍历不管采用何种方式,都需要用到栈 ...
随机推荐
- thinkphp--导入导出xls文件
/** * 数组转xls格式的excel文件 * @param array $data 需要生成excel文件的数组 * @param string $filename 生成的excel文件名 * 示 ...
- php函数封装
这是一些自定义封装的函数类,调用起来很方便,以后会有更多的封装函数更新! // 弹框跳转function alert($msg,$url=''){ echo "<script>& ...
- PHP 把MYSQL重复ID 二维数组重组为三维数组
应用场景 MYSQL在使用关联查询时,比如 产品表 与 产品图片表关联,一个产品多张产品图片,关联查询结果如下: $arr=[['id'=>1,'img'=>'img1'],['id'=& ...
- SQL三表连接查询与集合的并、交、差运算查询
use db_sqlserver2 select 姓名, 工资, 面积, 金额, (工资+金额/1000) as 实发工资 from 职工,仓库, 订购单 where 职工.职工号=订购单.职工号 a ...
- ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.33.10' (111) 解决方法
谷歌了一下之后,原来是在mysql的my.cnf中有下面一段代码: # Instead of skip-networking the default is now to listen only on ...
- 一篇文章带你编写10种语言HelloWorld
0,编程语言排行榜 计算机编程语言众多,世界上大概有600 多种编程语言,但是流行的也就几十种.我们来看下编程语言排行榜,下面介绍两种语言排行榜. Ⅰ TIOBE 指数 该指数每月更新一次,它监控了近 ...
- 第七周CorelDRAW课总结
1.这节课学到了什么知识? "交互式透明工具""交互式阴影工具"以及"交互式调和工具"制作水晶表情包. 2.有什么心得体会? 无 3.存在的 ...
- POJ - 2387 Til the Cows Come Home (最短路入门)
Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before ...
- Flutter 系统是如何实现ExpansionPanelList的
老孟导读:Flutter组件有一个很大的特色,那就是很多复杂的组件都是通过一个一个小组件拼装而成的,今天就来说说系统的ExpansionPanelList是如何实现的. 在了解ExpansionPan ...
- 支付宝小程序云开发(Serverless)
支付宝小程序云开发(Serverless) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 一.在支付宝账号里面开通小程序云服务 ...