数据结构-二叉搜索树和二叉树排序算法(python实现)
今天我们要介绍的是一种特殊的二叉树——二叉搜索树,同时我们也会讲到一种排序算法——二叉树排序算法。这两者之间有什么联系呢,我们一起来看一下吧。
开始之前呢,我们先来介绍一下如何创建一颗二叉搜索树。
假设我们有这样一些数据:[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,现在我们要进行判断,如果5比9小,那么就将5插入到节点9的左子树;如果5比9大的话,就把5插入到9的右子树。经过判断,我们将5插入到9的右左子树,因为9的左节点为空,所以我们直接将5作为9的左节点。
接下来判断第三个数据2,我们同样先将2和9进行判断,将2插入到9的左子树,但是9的左节点不为空,所以我们再将2与9的左节点5进行判断。2比5小,并且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实现)的更多相关文章
- 数据结构☞二叉搜索树BST
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它可以是一棵空树,也可以是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它 ...
- 数据结构-二叉搜索树(BST binary search tree)
本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 二叉搜索树简介 顾名思义,二叉搜索树是以一棵二叉树来组织的,这样的一棵树可以用一个链表数据结构来 ...
- 数据结构-二叉搜索树的js实现
一.树的相关概念 1.基本概念 子树 一个子树由一个节点和它的后代构成. 节点的度 节点所拥有的子树的个数. 树的度 树中各节点度的最大值 节点的深度 节点的深度等于祖先节点的数量 树的高度 树的高度 ...
- 数据结构---二叉搜索树BST实现
1. 二叉查找树 二叉查找树(Binary Search Tree),也称为二叉搜索树.有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一 ...
- Java数据结构——二叉搜索树
定义二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若 ...
- 基本数据结构 —— 二叉搜索树(C++实现)
目录 什么是二叉搜索树 二叉搜索树如何储存数值 二叉搜索树的操作 插入一个数值 查询是否包含某个数值 删除某个数值 测试代码 参考资料 什么是二叉搜索树 二叉搜索树(英语:Binary Search ...
- 九度OJ 1009:二叉搜索树 (二叉树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6321 解决:2767 题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需 ...
- 数据结构 - 二叉搜索树封装 C++
二叉搜索树封装代码 #pragma once #include <iostream> using namespace std; template<class T>class T ...
- 数据结构——二叉搜索树(Binary Search Tree)
二叉树(Binary Tree)的基础下 每个父节点下 左节点小,右节点大. 节点的插入: 若root==NULL则root=newnode 否则不断与节点值比较,较小则向左比较,较大则向右比较. 完 ...
随机推荐
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'wher id = 41' at line 1
where 没有打完整
- 西安7月21日「拥抱开源,又见.NET:壹周年Party」线下交流活动
本次活动既是.NET西安社区的第四次线下交流活动,也是.NET西安社区成立一周年庆活动..NET西安社区2018年7月20日成立,经过一年时间的发展,社区共举办过3次大型线下交流活动,社区人数由最初的 ...
- Python浮点数(小数)运算误差的原因和解决办法
原因解释:浮点数(小数)在计算机中实际是以二进制存储的,并不精确.比如0.1是十进制,转换为二进制后就是一个无限循环的数:0.0001100110011001100110011001100110011 ...
- Quartz每次调度时被执行两次
[关键字:重复执行.重复调用.每次执行两次.执行2次] 前言: 先说一下,项目背景.由于组内某成员在用Maven搭建项目时不规范,导致项目的名称与实际访问项目名称不一致.在部署项目时,必需要配一下虚拟 ...
- Gym 101257G:24(尺取)
http://codeforces.com/gym/101257/problem/GGym 101257G 题意:给出n个人,和一个数s,接下来给出每个人当前的分数和输掉的概率.当一个人输了之后就会掉 ...
- 2. python Mac 安装 dlib
在macOS上: 从Mac App Store安装 XCode(或安装XCode命令行工具)(最低版本是:xcode8 以上) 有 homebrew 安装 有 CMAKE 安装 基础包 :numpy ...
- springcloud高可用方案
1. 场景描述 公司在规划后续可能会做中台服务,考虑用微服务的方案,让用springcloud部署个简单的高可用Demo. 2. 解决方案 2.1 方案说明 demo用了5台虚拟机: (1)1台gat ...
- 【基础算法模拟+例题】-C++
在漫长的刷题练习过程中,几乎所有稍微熟练一点的OIer都会,但是都几乎没有经过系统的学习,今天,我们就来讲讲模拟算法,也是为了复习emm. 定义? 定义?模拟还有什么定义吗? 那什么是模拟呢? 就是按 ...
- Linux文件权限设置教程
Linux的文件基本权限有9个,分别是owenr.group.others三种身份各自有自己的r.w和x,比如"rwxrwxrwx",就表示owener具有r.w.x权限,同样gr ...
- JS实现当前页弹出窗口,且页面变灰不可操作
使用JS在当前页面在div中加载弹出窗口,并让当前页面变灰不可操作. 加载弹出窗口的div需将宽高设置成整个页面的大小,以覆盖当前页面的内容. opacity:0.6: 页面可见度设置为0.6(1为完 ...