二叉搜索树的基本概念、性质及Python实现
2015-04-18 22:17
183 查看
———-
这样做的意义就在于可以很快地实现查找,判断也很容易进行。在上一篇日志(二叉树的基本性质)中就已经使用了生成二叉搜索树的代码,大家可以参考日志中如何创建二叉树的代码。
非递归的查找
若删除的元素刚好是叶子节点,就直接删除元素,然后把该结点用None来代替。
若删除的元素只有一个孩子节点,那么就把这个节点删除再将其孩子节点变成现在的节点。
若删除的元素有两个孩子,那么需要判断的情况就稍微复杂一点,需要从该元素的右孩子树中找到一个合适的元素(称为后继)来代替该元素,原来的右子树变为当前更新元素的右子树。
二叉搜索树
二叉搜索树相对于普通的二叉树的区别就在于其内部数据额存储是有规律的,任何一个节点其左边的节点小与其根结点数值大小,其右边节点则大与其根结点数值大小。这样做的意义就在于可以很快地实现查找,判断也很容易进行。在上一篇日志(二叉树的基本性质)中就已经使用了生成二叉搜索树的代码,大家可以参考日志中如何创建二叉树的代码。
元素的查找
利用递归进行查找def treeSearch(x, k): if x == None or k = x.data: return x elif k < x.data: return treeSearch(x.left, k) else: return treeSearch(x.right, k)
非递归的查找
def treeSearch(x, k): while x != None and k != x.data: if k < x.data: x = x.left elif k > x.data: x = x.right else: return x
元素的插入
元素的插入请参考二叉树的性质那篇文章中的insert函数,直接调用即可插入元素。元素的删除
删除元素共有如下三种情况:若删除的元素刚好是叶子节点,就直接删除元素,然后把该结点用None来代替。
若删除的元素只有一个孩子节点,那么就把这个节点删除再将其孩子节点变成现在的节点。
若删除的元素有两个孩子,那么需要判断的情况就稍微复杂一点,需要从该元素的右孩子树中找到一个合适的元素(称为后继)来代替该元素,原来的右子树变为当前更新元素的右子树。
def treeDelete(Tree, z): if z.left is None: transplant(Tree, z, z.right) elif z.right is None: transplant(Tree, z, z.left) else: y = treeMaximum(z.right) if y.p is not z: transplant(Tree, y, y.right) y.right.p = y transplant(Tree, z, y) y.left = z.left y.left.p = y #定义transplant函数,函数用在将一棵树的子树换为另一个子树 def transplant(Tree, u, v): if u.p is None: Tree.root = v elif u == u.p.left u.p.left = v else: u.p.right = v if v is not None: v.p = u.p # 再定义上述使用过的最大元素的求解函数,就是找到最右边的元素。 def treeMaximum(x) while x.right is not None: x = x.right return x # 其中上面的函数还涉及到x.p指的是x的父节点,是定义结构体的时候可以确定的。
相关文章推荐
- 小白学数据结构——二、树与堆(基本概念及二叉树、二叉堆的python实现)
- 栈和队列数据结构的基本概念及其相关的Python实现
- 栈和队列数据结构的基本概念及其相关的Python实现
- 小白学数据结构——三、图(基本概念及python实现)
- SVM 基本概念及Python实现方式
- 二叉树的基本性质、存储方式与遍历(Python实现)
- SVM基本概念及Python实现代码
- 栈和队列数据结构的基本概念及其相关的Python实现
- python网络爬虫——基本概念及代码实现1
- 【Objective-C】OC中自定义对象的归档基本概念和使用方法(实现NSCoding协议)
- 数据结构(基于python实现)01-集合的概念
- 用python实现一些基本算法
- Yong式(杨氏)矩阵的概念与性质 ,以及算法实现
- 眼见为实(1):C++基本概念在编译器中的实现
- 基本A*算法python实现
- 用Python中的wxPython实现最基本的浏览器功能
- 堆的概念及基本操作实现
- 感知机相关概念及Python实现
- 【转载】二叉树的基本概念和实现
- K近邻相关概念及其Python实现