搜索二叉树的python实现
来源:互联网 发布:黄思路韩寒 知乎 编辑:程序博客网 时间:2024/06/04 19:11
我的代码片:https://code.csdn.net/snippets_manage
''' 功能:在二叉搜索树中查找一个元素,若该元素存在则返回该元素,否则返回该元素若存在时的父母结点 参数: key:结点的键值 root:二叉树的根节点'''def Find(key, root): # 若该树为空树或者根节点的键值等于key,则返回根节点 if root == None or root.key == key: return root # 若该树非空,且key不等于根节点的键值,则先判读key值对应的结点在root的左子树还是右子树 # 若key小于root的键值,那么key值对应的结点在root的左子树 if root.key > key: # 若root的左子树存在,递归查找 if root.left != None: return Find(key, root.left) # 若root的左子树不存在,key对应的结点不存在,返回root return root # 若key大于root的键值,在root的右子树中查找key对应的结点 if root.key < key: # 若root的右子树存在,递归查找 if root.right != None: return Find(key, root) # 否则直接返回root return root''' 功能:往书中插入一个结点 参数:N'''def Insert(N): # 找出N的父母节点 M = Find(N) # 若N的键值小于M的键值,则N为M的左孩子结点 if M.key >N.key: M.left = N N.parent = M # 否则N为M的右孩子结点 else: M.right = N N.parent = M''' 功能:返回大于键值key的最小结点,若key是二叉树中最大的结点,则返回key对应的结点 参数: N:二叉树的某一结点'''def Next(N): # 如果N有右孩子树,返回N的右孩子树的左孩子叶子结点 M = Find(max, root) if M == N: return N if N.right != None: return LeftDescendant(N.right) # 如果N没有右孩子结点,返回N的右父母结点 if N.right == None: return RightAncenstor(N)def LeftDescendant(N): if N.left == None or N == None: return N return LeftDesendant(N.left)def RightAncenstor(N): if N == N.parent.left: return N.parent return LeftAncenstor(N.parent)''' 功能:删除输入结点 参数: N:要删除的结点'''def Delete(N): # 若N没有右孩子结点,N的父母结点指向N的左孩子结点 if N.right == None: N.left.parent = N.parent # 若N是右孩子结点 if N.parent.right == N: N.prent.right = N.left return # 若N是左孩子结点 if N.parent.left == N: N.parent.left = N.left return # 若N有右孩子结点 else: # 查找大于N的最小结点 x = Next(N) # 用x替代N N.key = X.key # 删除x,由于x一定是左孩子结点 x.parent.left = None return ''' 功能:输出键值在x,y之间的一系列结点 参数:x,y,root'''def RangeRearch(x, y, root): L = [] N = Find(x, root) while N != False and N.key <= y: if N.key >= x: L.append(N) N = Next(x) return L''' 功能:将两棵树合成 参数:R1,R2(R1中的元素小于R2)'''def Merge(R1, R2): # 在R1中找出最大的元素,作为合成树的根节点 R = Find(max, R1) # 删除R Delete(R) # 合成树 MergeWithRoot(R1, R2, R) return Rdef MergeWithRoot(R1, R2, R): # R1作为R的左子树 R.left = R1 R1.parent = R # R2作为R的右子树 R.right = R2 R2.parent = R return R''' 功能:将树R分割成两棵树R1和R2(R1的元素均小于x,R2的元素均大于x) 参数:树的根节点R, 分割的键值'''def Split(x, R): if R == None: return (None, None) if R.key >= x: (R1, R2) = Split(x, R.left) R3 = MergeWithRoot(R2, R.right, R) return (R1, R3) if x > R.key: (R1, R2) = Split(x, R.right) R3 = MergeWithRoot(R1, R.left, R) return (R3, R2)
0 0
- 搜索二叉树的python实现
- 平衡搜索二叉树的python实现
- 二叉搜索树 python实现
- 二叉搜索树的基本概念、性质及Python实现
- 使用python实现二叉搜索树
- 二叉搜索树的实现
- 二叉搜索树的实现
- 二叉搜索树的实现
- 二叉搜索树的实现
- 搜索二叉树的实现
- 二叉搜索树的实现
- 二叉搜索树的实现
- 二叉搜索树的实现
- 二叉搜索树的实现
- 二叉搜索树的实现
- 二叉搜索树的实现
- 搜索二叉树的实现
- 二叉搜索树的实现
- python AES加密模块使用
- css实现鼠标放到图片旋转效果
- 一直以来伴随我的一些学习习惯(三):阅读方法
- 移动端Web开发
- jedis高版本的JedisPoolConfig没有maxActive和maxWait
- 搜索二叉树的python实现
- (面试)C语言中关键字的总结
- PHP的线程安全与非线程安全版本的区别
- 发糖果
- Toolbar 学习笔记
- sql server 备份还原数据库 命令、以及权限调整
- 地图之CLLocationManager的使用
- 17. 打包Python程序发布
- 性能调试 systrace工具