• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python实现二叉查找树

python 搞代码 4年前 (2022-01-09) 30次浏览 已收录 0个评论
# -*- coding: cp936 -*-#---------------------------------------------#                                             # author  chile                                   # version  1.0                                # date  2014-02-17                                       # desc 二叉树                      #                                             #                                            #                                            #---------------------------------------------class bintree:    def __init__(self):        self.root = None            # 前驱节点    def treePredecessor(self,entry):        if entry.left != None:            return self.maxTree(entry.left)        preNode = entry.parent        tempNode = entry        while preNode != None and preNode.right.value != entry.value:            tempNode = preNode            preNode = preNode.parent        return preNode                #后继节点          def treeSuccessor(self,entry):        if entry.right != None:            return self.minTree(entry.right)        preNode = entry.parent        tempNode = entry        while preNode != None and preNode.left.value != entry.value:            tempNode = preNode            preNode = preNode.parent        return preNode        def add(self,value):        tempNode = self.root        parentNode = None        entry = bintree.entry(value = value)        while tempNode != None:            parentNode = tempNode            if cmp(value,parentNode.value) < 0:                tempNode = tempNode.left            else:                tempNode = tempNode.right        if parentNode == None:            self.root = entry        elif cmp(value,parentNode.value) < 0:            parentNode.left = entry            entry.parent = parentNode        else:            parentNode.right = entry            entry.parent = parentNode  <i style="color:transparent">本文来源gaodai$ma#com搞$$代**码网$</i>      #这里删除是全部删除节点(包括所有子节点)    def remove(self,value):        root = self.root        parentNode = None        if value == root.value:            root.left = None            root.right = None        while root != None:            parentNode = root.parent            if value == root.value:                root.left = None                root.right = None                if parentNode.left != None and parentNode.left.value == value:                    parentNode.left = None                    break                else:                    parentNode.right = None                    break            elif cmp(value,root.value) < 0:                root = root.left            else:                root = root.right        #查找节点    def search(self,value):        root = self.root        while root != None and root.value != value:            if cmp(value,root.value) < 0:                root = root.left            else:                root = root.right        return root        #最小值的节点,其实就是找左边的叶子节点    def minTree(self,root):        entry = root        while entry.left != None:            entry = entry.left        return entry        #最大值的节点    def maxTree(self,root):        entry = root        while entry.right != None:            entry = entry.right        return entry                        #中序遍历    def iterator(self,root):        if root != None:            self.iterator(root.left)            print root.value            self.iterator(root.right)                class entry:        def __init__(self, value=None):            self.left = None            self.right = None            self.parent = None            self.value = value            arr = [15,5,3,12,10,13,6,7,16,20,18,23]tree = bintree()for val in arr:    tree.add(val) tree.iterator(tree.root)node = tree.search(16)print node.left , node.right , node.parent.valueprint tree.maxTree(node).valueprint tree.treePredecessor(node).valueprint tree.treeSuccessor(node).value#print tree.maxTree() , tree.minTree()

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python实现二叉查找树
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址