二叉查找树:Python实现
来源:互联网 发布:淘宝男士牛仔裤 编辑:程序博客网 时间:2024/05/17 22:01
#coding:utf8#author:HaxtraZclass BST(object): """二叉查找树的简单实现""" def __init__(self): self.root = None def insert(self, val): newNode = BSTnode(val) if self.root is None: self.root = newNode else: curNode = self.root while True: if val < curNode.val: #进入左子树 if curNode.left is None: curNode.left = newNode newNode.parent = curNode break curNode = curNode.left else: #进入右子树 if curNode.right is None: curNode.right = newNode newNode.parent = curNode break curNode = curNode.right def find(self, val): curNode = self.root while curNode is not None: if val < curNode.val: curNode = curNode.left elif val > curNode.val: curNode = curNode.right else: return True # 找到了! return False # 没找到 def delete(self, val): curNode = self.root while curNode is not None: if val < curNode.val: curNode = curNode.left elif val > curNode.val: curNode = curNode.right else: # 找到了val if curNode.left is not None and curNode.right is not None: target = self.successor(curNode.right).val curNode.val = target.val self.delete(target) elif curNode.left is not None: if curNode == self.root: self.root = curNode.left parNode = curNode.parent subNode = curNode.left if parNode.left == curNode: parNode.left = subNode else: parNode.right = subNode subNode.parent = parNode else: if curNode == self.root: self.root = curNode.right parNode = curNode.parent subNode = curNode.right if parNode.right == curNode: parNode.right = subNode else: parNode.left = subNode return True return False # 不存在val,删除失败 def minimum(self, node): # 返回最小值的节点。其实就是most left one curNode = node if curNode is None: #空树 return None while curNode.left is not None: curNode = curNode.left return curNode def maximum(self, node): #返回最大值的节点。其实就是most right one curNode = node if curNode is None: #空树 return None while curNode.right is not None: curNode = curNode.right return curNode def successor(self, node): #node是二叉查找树中的一个节点 #寻找node的后继节点,然后返回 curNode = node if curNode.right is not None: #右子树非空,返回右子树最左节点 return self.minimun(curNode.right) else: #右子树为空,则返回“最低祖先” parNode = curNode.parent while parNode is not None and parNode.right == curNode: curNode = parNode parNode = parNode.parent return parNode def show(self): # 中序遍历 self.display(self.root) print '\n' def display(self, node): if node is None: return self.display(node.left) print node.val, self.display(node.right)# def predecessor(self, node): # 获取前驱节点。类似于获取后继节点,这里省略。。class BSTnode(object): """二叉查找树的节点类型""" def __init__(self, val): self.val = val self.left = None self.right = None self.parent = Noneif __name__ == '__main__': mylist = [2, 2, 7, 4, 1, 5] bst = BST() for i in range(len(mylist)): bst.insert(mylist[i]) bst.show() bst.delete(7) bst.show()
二叉查找树,英文Binary Search Tree,也叫二叉排序树,是一种基本的数据结构,简称BST
它支持多种动态集合操作,包括查找(find),最小值(minimum),最大值(maximum),后继(successor),前驱(predecessor),插入(insert),删除(delete),以及中序遍历等。它既可以用作字典,也可以用作优先队列。
BST不是稳定的树,极端情况下会退化为线性结构,但平均期望上,insert,delete操作可以为O(lg n),树的期望高度为O(lg n)。
参考了《算法导论》等书,写出了具有insert,delete,find功能的BST,如果有认为不正确的地方欢迎拍砖。
- 二叉查找树:Python实现
- python实现二叉查找树
- 二叉查找树python实现
- python实现二叉查找树
- 二叉查找树python实现
- python 二叉查找树
- python二叉查找树
- 二叉查找树实现
- 二叉查找树实现
- 二叉查找树实现
- 二叉查找树实现
- 二叉树查找之python实现--(插入)
- 查找--二叉查找树分析与实现
- JAVA二叉查找树实现
- 二叉查找树代码实现
- 二叉查找树 ADT实现
- java实现二叉查找树
- 二叉查找树 java实现
- eclipse如果去掉theme
- GS1011无线模块的使用简介。
- 创建Oracle表空间
- 黑马程序员————枚举类型和数据结构
- Traits技术
- 二叉查找树:Python实现
- oracle复习
- jQuery中的get()函数用法介绍
- 汇编笔记
- 获得当前IE版本.
- 扩展你的js
- linux下对文件的操作
- Linux路由器流量统计系统
- 安卓开发