今天我们要介绍的是一种特殊的二叉树——二叉搜索树,同时我们也会讲到一种排序算法——二叉树排序算法。这两者之间有什么联系呢,我们一起来看一下吧。

开始之前呢,我们先来介绍一下如何创建一颗二叉搜索树。

假设我们有这样一些数据:[9,5,2,1,4,2,1,41,22,11,35,24,11,10,4,23,9,45,2,35,12,35,16,27,56,31,73]

我们就用这些数据来创建二叉排序树。

首先,我们将第一个数据9作为二叉排序树的根节点,

然后我们拿到第二个数据5,现在我们要进行判断,如果59小,那么就将5插入到节点9的左子树;如果59大的话,就把5插入到9的右子树。经过判断,我们将5插入到9的右左子树,因为9的左节点为空,所以我们直接将5作为9的左节点。

接下来判断第三个数据2,我们同样先将29进行判断,将2插入到9的左子树,但是9的左节点不为空,所以我们再将29的左节点5进行判断。25小,并且5的左节点为空,所以将2作为5的左节点。

以此类推,我们就可以画出一颗二叉搜索树,感兴趣的同学不妨亲自画一下。

那二叉树排序有是怎么回事呢?

我们回过头来看我们刚刚创建好的二叉树,前面我们已经介绍过了二叉树的前序、中序、后序遍历。我们不妨来尝试一下二叉搜索树的三序遍历。

如果对二叉树进行三序遍历的话,你就会发现,二叉搜索的中序遍历结果恰好就是从小到大排列的。

那我们就明白了,创建二叉搜索树并进行中序遍历就可以实现排序。

接下来照例我们用代码实现二叉搜索树和二叉树排序:

#-*- coding: utf-8 -*-

class BinaryTree:
def __init__(self, data):
self.left = None
self.right = None
if type(data) == list:
self.data = data[0]
for d in data[1:]:
self.insert(d)
else:
self.data = data def insert(self, data):
bt = self
while True:
if data <= bt.data:
if bt.left == None:
bt.left = BinaryTree(data)
break
else:
bt = bt.left
else:
if bt.right == None:
bt.right = BinaryTree(data)
break
else:
bt = bt.right def mid_order(self):
result = []
stack = []
node = self
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack.pop()
result.append(node.data)
node = node.right
return result

上面呢,我们定义了一个二叉树类,并实现了节点的插入和中序遍历方法。在它的构造方法中,如果输入的参数是一个列表,那么我们就根据列表创建二叉搜索树,如果是一个值那么就之创建一个根节点。

下面我们就来创建一下二叉搜索树:

data = [9,5,2,1,4,2,1,41,22,11,35,24,11,10,4,23,9,45,2,35,12,35,16,27,56,31,73]

bt = BinaryTree(data)
mid = bt.mid_order()
print(mid)

执行一下,输出的结果是这样的

[1, 1, 2, 2, 2, 4, 4, 5, 9, 9, 10, 11, 11, 12, 16, 22, 23, 24, 27, 31, 35, 35, 35, 41, 45, 56, 73]

你学会了吗?

数据结构-二叉搜索树和二叉树排序算法(python实现)的更多相关文章

  1. 数据结构☞二叉搜索树BST

    二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它可以是一棵空树,也可以是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它 ...

  2. 数据结构-二叉搜索树(BST binary search tree)

    本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 二叉搜索树简介 顾名思义,二叉搜索树是以一棵二叉树来组织的,这样的一棵树可以用一个链表数据结构来 ...

  3. 数据结构-二叉搜索树的js实现

    一.树的相关概念 1.基本概念 子树 一个子树由一个节点和它的后代构成. 节点的度 节点所拥有的子树的个数. 树的度 树中各节点度的最大值 节点的深度 节点的深度等于祖先节点的数量 树的高度 树的高度 ...

  4. 数据结构---二叉搜索树BST实现

    1. 二叉查找树 二叉查找树(Binary Search Tree),也称为二叉搜索树.有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一 ...

  5. Java数据结构——二叉搜索树

    定义二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若 ...

  6. 基本数据结构 —— 二叉搜索树(C++实现)

    目录 什么是二叉搜索树 二叉搜索树如何储存数值 二叉搜索树的操作 插入一个数值 查询是否包含某个数值 删除某个数值 测试代码 参考资料 什么是二叉搜索树 二叉搜索树(英语:Binary Search ...

  7. 九度OJ 1009:二叉搜索树 (二叉树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6321 解决:2767 题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需 ...

  8. 数据结构 - 二叉搜索树封装 C++

    二叉搜索树封装代码 #pragma once #include <iostream> using namespace std; template<class T>class T ...

  9. 数据结构——二叉搜索树(Binary Search Tree)

    二叉树(Binary Tree)的基础下 每个父节点下 左节点小,右节点大. 节点的插入: 若root==NULL则root=newnode 否则不断与节点值比较,较小则向左比较,较大则向右比较. 完 ...

随机推荐

  1. 给VS设置代码创建人的宏

    Sub AddFunComment() Dim DocSel As EnvDTE.TextSelection DocSel = DTE.ActiveDocument.Selection DocSel. ...

  2. scrapy实战3利用fiddler对手机app进行抓包爬虫图片下载(重写ImagesPipeline):

    关于fiddler的使用方法参考(http://jingyan.baidu.com/article/03b2f78c7b6bb05ea237aed2.html) 本案例爬取斗鱼 app 先利用fidd ...

  3. Coder必须自废的两样神功

    Coder必须自废的两样神功 大理段氏以一阳指神功驰名天下.奉六脉宝经,立天龙佛院:凭借数百载基业威名,与嵩山少林.终南全真分庭抗礼:乃宋代中华武术三大派系之一. 二指禅是一种鲜为人知的秘传功法,通过 ...

  4. GitHub代码阅读神器,你值有拥有!

    (题图:from  github) Github作为全球最大的程序员聚集地,已经成为学习开发技能的绝佳伴侣(如果你是程序员,但你还没有账户的话,这里建议你去signup,毕竟能增加成长的机会,不能错过 ...

  5. 项目心得——mybatisplus注解

    最近在做的项目中使用了mybatisplus,遇到了一些小问题,特此记录. 1.在sql查询后返回的数据中,会存在一些实体类中本没有的字段: 遇到这个问题时,我理所当然的就去实体类中添加了这个字段,但 ...

  6. linux 定时任务 crontabs 安装及使用方法

    boom 安装 crontab yum install crontabs centos7 自带了我没有手动去装 启动/关闭 service crond start // 启动服务 service cr ...

  7. 2017-10271weblogic漏洞exp测试及补丁测试

    靶机:weblogic12.1.3.0 战斗机:kali 导弹:burpsuite 1.首先开启kali某端口监听 2.向靶机发送exp 3.查看kali监听 打码保平安~~ 4.打上补丁 5.验证补 ...

  8. Jquery UI sortable

    所有的事件回调函数都有两个参数:event和ui,浏览器自有event对象,和经过封装的ui对象 ui.helper - 表示sortable元素的JQuery对象,通常是当前元素的克隆对象 ui.p ...

  9. Windows Presentation Foundation (WPF) 项目中不支持xxx的解决

    一般Windows Presentation Foundation (WPF) 项目中不支持xxx都是由于没引用相应的程序集导致,比如Windows Presentation Foundation ( ...

  10. 【CYH-01】小奔的国庆练习赛:赛后标程

    前排鸣谢@找寻 大佬 emm-由于头一次举办公开赛所以--准备不是很充分,所以说题解也没有备好,在这里表示歉意. 欢迎大家来发布题解,在此我们可以提供AC代码,供大家参考. T1 解析:这一题可能栈溢 ...