数据结构----二叉树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 二叉树的后序遍历,题目要求是采用非递归的方式,这个在上数据结构的课时已经很清楚了,二叉树的非递归遍历不管采用何种方式,都需要用到栈 ...
随机推荐
- iOS appium
1.如果没有安装过Homebrew,先安装homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/ ...
- 百度云BCH配置说明
百度云虚拟空间(BCH) 来源:https://www.cnblogs.com/llll/p/7930029.html 参考资料:https://cloud.baidu.com/doc/BCH/Ge ...
- weblogic补丁升级详细步骤,18.7.17补丁更新
weblogic打补丁 到weblogic官网下载补丁包 对应的补丁包 如: p22248372_1036012_Generic.zip 一 安装补丁步骤 1.登录linux的weblogic用户 ...
- CentOS 7.4 安装网易云音乐
1.下包–>网易云音乐 Ubuntu14.04(推荐14.04依赖包网上能找到) 提示:16.04有部分依赖包还找不到,有兴趣可以自行打包RPM安装. 2.解包 (1)使用 ar -vx解压ub ...
- 2019-2020-1 20199328《Linux内核原理与分析》第八周作业
笔记部分 2019/11/4 17:55:22 elf文件代码默认加载到0x8048000,然后是一段首部信息,然后到达程序的真实入口 正常的系统调用会先进入内核态->用户态->系统调用下 ...
- ES6中Fetch的封装及使用,炒鸡简单~
之前写过一篇<ajax.axios.fetch之间的详细区别以及优缺点> 戳这里 1.封装 (http.js) class Ajax { get(url) { return new Pro ...
- axis2 411
返回411加个这个就行了 _operationClient.getOptions().setProperty(HTTPConstants.CHUNKED, false); 本文转自 cd1989929 ...
- 详解如何使用gulp实现项目在浏览器中的自动刷新
情况描述: 我们很容易遇到这样一种情况: 我们并不是一开始就规划好了整个项目,比如可能接手别人的项目或者工程已经手动创建好了,现在要想利用gulp来实现浏览器自动刷新,那么如何做呢? 其实非常简单,本 ...
- 负载均衡服务之HAProxy https配置、四层负载均衡以及访问控制
前文我们聊了下haproxy的访问控制ACL的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12817773.html:今天我们来聊一聊haproxy的h ...
- Codeforce 263D Cycle in Graph 搜索 图论 哈密尔顿环
You've got a undirected graph G, consisting of n nodes. We will consider the nodes of the graph inde ...