数据结构回顾和总结(二叉搜索树(BST)的基本操作)
来源:互联网 发布:推荐淘宝卖高仿鞋的店 编辑:程序博客网 时间:2024/05/16 11:46
国庆七天乐,回家呆了几天,走亲访友,看到老人们身体健康,精神头也足,自己也挺开心的。在家睡觉也很舒服,每天可以过得很开心,有的时候真觉得小城市的生活节奏好像也不错。不过时间过得是真的快,很多事也必须要赶紧解决才行。
过完国庆回来又重拾数据结构,回顾二叉搜索树的相关内容时不免感觉到有些陌生,所以慢慢来。
二叉搜索树主要的几个操作分别是:搜索、插入、删除、查找最值。
首先还是搞一下二叉搜索树的基本概念,简单来说就是右儿子最大,父亲中等,左儿子最小。
先建立二叉树类:
class tr(object): def __init__(self,data=None): self.right = None self.left = None self.data = data
然后是第一个功能,查找。
查找的思路相对简单:给定一个树的根节点,再给出一个待查找的值tar。如果tar比当前节点的值大就从当前节点的右子树中继续查找,如果小就从当前节点的左子树中继续查找,如果等于就返回当前节点。如果最终查不到,就代表树中没有这个值,返回一个None。下面是find的代码:
def find(tar,root): if not root: return None if tar > root.data: return find(tar,root.right) if tar < root.data: return find(tar,root.left) if tar == root.data: return root
然后是插入操作。插入操作的功能:给出一个树的根节点和待插入的值tar,为tar找到合适的位置插入,然后返回整棵树的根节点。如何确定合适的位置呢?那肯定是按照左<根<右的原则。而且,如果能在树中找到tar,就表示这个值插不进去,那就直接返回根节点。源代码如下:
def insert(root,tar): #代表已经到了最后一层 if not root: return tr(tar) if tar > root.data: root.right = insert(root.right,tar) if tar < root.data: root.left = insert(root.left,tar) return root
由这个插入操作,可以想到一个建树的函数,输入一个ArrayList,然后把树建好,然后返回建好的树的根节点,python代码如下:
def build(lis): ro = tr(lis[0]) #ro代表树根 for x in lis[1:]: insert(ro,x) return ro
最后一个操作就是删除了,删除这个操作也算是BST操作中比较复杂的一个。删除要求给出一个树的根节点和待删除的值,然后返回删除完成后的树的根节点。函数的基本模式也是使用递归,所以问题就出在待删除节点的情况上。待删节点要是个叶节点,那好说,直接删了就完事了,不会连锁反应。要是待删节点有两个子树的话那就复杂了,采取的办法是:找到该节点右子树中的最小值,把当前节点的值改成这个最小值,然后再在当前节点的右子树中删除这个最小值。如果待删节点只有一个儿子,那也好办,把这个儿子接到现在这个节点的位置就行。python代码如下:
def delete(root,tar): tmp = tr() if not root: return None if tar > root.data: root.right = delete(root.right,tar) if tar < root.data: root.left = delete(root.left,tar) else: if root.right and root.left: tmp = find_min(root.right) root.data = tmp.data root.right = delete(root.right,root.data) else: if not root.left: root = root.right elif not root.right: root = root.left return root
这其中用到了一个find_min函数,也就是查找最小值,这个函数思路还是蛮简单:最小的都在左边,直接往左走到底,那就是最小值了。源码如下:
def find_min(root): k = root while k.left: k = k.left return k
以上就是BST的基本操作,不算是特别难,但也得掌握扎实,这样做起题来就更舒服一些。
- 数据结构回顾和总结(二叉搜索树(BST)的基本操作)
- 数据结构:二叉搜索树(BST)的基本操作
- 二叉搜索树(BST)的基本操作
- 二叉搜索树(BST)的基本操作
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- <数据结构与算法>二叉搜索树(BST)的基本操作(C语言描述)
- 二叉搜索树(BST,基本操作实现)
- 【数据结构基础】二叉搜索(排序)树的基本操作
- 数据结构13.二叉搜索树 BST
- 【数据结构】二叉搜索树(BST)
- (BST)二叉搜索树的操作(一)
- 二叉搜索树(BST)相关知识总结
- BST二叉搜索树的建树和先序遍历
- 基于二叉搜索树的符号表和BST排序
- 二叉搜索树(BST)的创建、插入、查找和删除
- BST 二叉搜索树
- 二叉搜索树BST
- 二叉搜索树BST
- POJ1862 水
- linux系统ftp的安装与配置
- MongoDB:2-MongoDB的基本命令
- 自定义圆加速减速
- configure build path 中各选项的意思
- 数据结构回顾和总结(二叉搜索树(BST)的基本操作)
- 探新Web前端开发(四)
- C++头文件algorithm 2——Sorting
- HDOJ 2087 剪花布条
- mvp模式
- Icpc训练赛 + 国庆大礼包
- java实现希尔排序
- Codeforces Round#412 C Success Rate
- Rxjava2-小白入门(二)