二叉树

  节点定义

 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和排序二叉树的更多相关文章

  1. 【C#数据结构系列】树和二叉树

    线性结构中的数据元素是一对一的关系,树形结构是一对多的非线性结构,非常类似于自然界中的树,数据元素之间既有分支关系,又有层次关系.树形结构在现实世界中广泛存在,如家族的家谱.一个单位的行政机构组织等都 ...

  2. "排序二叉树"之探幽

    /*怎么理解排序二叉树呢?在二叉树的基本定义上增加两个基本条件: (1)所有左子树的节点数值都小于此节点的数值: (2)所有右节点的数值都大于此节点的数值. */ 1 /*************** ...

  3. c++(排序二叉树)

    前面我们讲过双向链表的数据结构.每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节点,这样所有的节点像一颗颗珍珠一样被一根线穿在了一起.然而今天我们讨论的数据结构却有一点不同,它有三个节点 ...

  4. Java编程的逻辑 (42) - 排序二叉树

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  5. 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

    树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构.    a.树是n ...

  6. javascript/js实现 排序二叉树数据结构 学习随笔

    二叉树是一种数据结构.其特点是: 1.由一系列节点组成,具有层级结构.每个节点的特性包含有节点值.关系指针.节点之间存在对应关系. 2.树中存在一个没有父节点的节点,叫做根节点.树的末尾存在一系列没有 ...

  7. 【数据结构&算法】11-树基础&二叉树遍历

    目录 前言 树的定义 树的存储结构 双亲表示法 孩子表示法 孩子兄弟表示法 二叉树 定义 特点 形态 特殊二叉树 斜树 满二叉树 完全二叉树 二叉树的性质 二叉树的存储结构 二叉树的顺序存储结构 二叉 ...

  8. c++(排序二叉树线索化)

    前面我们谈到了排序二叉树,还没有熟悉的同学可以看一下这个,二叉树基本操作.二叉树插入.二叉树删除1.删除2.删除3.但是排序二叉树也不是没有缺点,比如说,如果我们想在排序二叉树中删除一段数据的节点怎么 ...

  9. LeetCode:145_Binary Tree Postorder Traversal | 二叉树后序遍历 | Hard

    题目:Binary Tree Postorder Traversal 二叉树的后序遍历,题目要求是采用非递归的方式,这个在上数据结构的课时已经很清楚了,二叉树的非递归遍历不管采用何种方式,都需要用到栈 ...

随机推荐

  1. json格式的相互转化

    直接上代码: header("Content-type: text/html; charset=utf-8"); $arr = array(); $arr = [ ', ', ' ...

  2. 基于Apache+Tomcat实现负载均衡

    1.基于Apache和tomcat实现负载均衡 准备三个虚拟机一个安装Apache两个安装Tomcat 关闭防火墙 systemctl stop firewalld Iptabled -F Seten ...

  3. java 之 abstract、interface

    abstract (抽象) 用abstract关键字来修饰一个类时,这个类叫做抽象类: 用abstract来修饰一个方法时,该方法叫做抽象方法. 抽象方法:只有方法的声明,没有方法的实现.以分号结束: ...

  4. 【Linux网络基础】 DNS:介绍、作用、解析原理

    1. DNS是什么?   DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去+·记住能够被机器直接读 ...

  5. mac OS npm 安装/卸载失败 权限问题解决方案

    在终端输入 sudo chown -R $USER /usr/local 输入开机密码

  6. 2016年全球IC设计大厂营收排名:高通稳居龙头

    TrendForce旗下拓墣产业研究所最新研究统计,2016年全球前十大无晶圆IC设计业者营收中,高通(QCT)仍然稳居龙头宝座.而前三大业者高通.新博通(Broadcom)与联发科合计营收占前十名营 ...

  7. CentOS+Subversion 配置Linux 下 SVN服务器

    1.安装#yum install subversion测试安装是否成功:#svnserve –version     回车显示版本说明安装成功 2.配置 ·建立版本库 #mkdir /opt/svnd ...

  8. P1522 牛的旅行 Cow Tours(floyd)

    题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...

  9. 杭电60题--part 1 HDU1003 Max Sum(DP 动态规划)

    最近想学DP,锻炼思维,记录一下自己踩到的坑,来写一波详细的结题报告,持续更新. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Problem ...

  10. Pika源码学习--pika的通信和线程模型

    pika的线程模型有官方的wiki介绍https://github.com/Qihoo360/pika/wiki/pika-%E7%BA%BF%E7%A8%8B%E6%A8%A1%E5%9E%8B,这 ...