zoukankan      html  css  js  c++  java
  • 二叉排序树(4)

    二叉排序树(Binary Sort Tree),亦称二叉搜索。

    特点:

    (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
    (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    (3)左、右子树也分别为二叉排序树;
    (4)没有键值相等的结点。
    平均查找长度= 每个结点的深度的总和 / 总结点数
     
    二叉排序树的搜索:
    class BTNode:
        def __init__(self, data, left, right):
            self.data = data
            self.left = left
            self.right = right
     
     
    class BTree:
        def __init__(self, root):
            self.root = root;
     
        def insert(self, value):
            self.insertNode(value, self.root)
     
        def insertNode(self, data, btnode):
            if btnode == None:
                btnode = BTNode(data, None, None)
            elif data < btnode.data:
                if btnode.left == None:
                    btnode.left = BTNode(data, None, None)
                    return
     
                self.insertNode(data, btnode.left)
            elif data > btnode.data:
                if btnode.right == None:
                    btnode.right = BTNode(data, None, None)
                    return
     
                self.insertNode(data, btnode.right)
     
        def printBTreeImpl(self, btnode):
            if btnode == None:
                return
     
            self.printBTreeImpl(btnode.left)
            print(btnode.data)
            self.printBTreeImpl(btnode.right)
     
        def printBTree(self):
            self.printBTreeImpl(self.root)
     
     
    if __name__ == '__main__':
     
        root = BTNode(2, None, None)
        btree = BTree(root)
        for i in [5, 8, 3, 1, 4, 9, 0, 7]:
            btree.insert(i)
        btree.printBTree()
    View Code
    def searchBintree(tree,num):
        if tree == 0:
            return False
        if num == tree[0]:
            return True
        if num < tree[0]:
            return searchBintree(tree[1],num)
        if num > tree[0]:
            return searchBintree(tree[2],num)
    
    def insert1(tree,num):
        if tree == []:
            tree.extend([num,[],[]])
        elif num<=tree[0]:
            insert1(tree[1],num)
        elif num >= tree[0]:
            insert1(tree[2],num)
    
    def getmax(tree):
        if tree[2]==[]:
            x=tree[0]
            if tree[1] != []:
                tree[:]=tree[1]
            else:
                tree.clear()
            return x
        else:
            return getmax(tree[2])
    def delete(tree,num):
        if tree == []:
            return False
        if num < tree[0]:
            return delete(tree[1],num)
        elif num > tree[0]:
            return delete(tree[2],num)
        else:
            if tree[1]==[] and tree[2]==[]:
                tree.clear()
            elif tree[1]==[]:
                tree[:]==tree[2]
            elif tree[2]==[]:
                tree[:]=tree[1]
            else:
                max = getmax(tree[1])
                tree[0]=max
            return True
    
    
    if __name__ == "__main__":
        mytree=[30,[15,[12,[],[]],[23,[],[]],],[52,[],[74,[],[]],]]
        num = int(input("num:"))
        print(searchBintree(mytree,num))
        print(insert1(mytree,num))
        print(delete(mytree,num))
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    xml转换为json格式时,如何将指定节点转换成数组 Json.NET
    快速删除C#代码中的空白行
    C#编程中的Image/Bitmap与base64的转换及 Base-64 字符数组或字符串的长度无效问题 解决
    Flash设置(各种版本浏览器包括低版本IE)
    使用vcastr22.swf做flash版网页视频播放器
    使用VLC Activex插件做网页版视频播放器
    web项目 在visual studio 输出窗口显示调试信息
    geos 3.6.3库windows版本 已编译完成的32位版本和64位版本
    vs2017 打开附带的localdb v13
    visual studio code 里调试运行 Python代码
  • 原文地址:https://www.cnblogs.com/topass123/p/12655829.html
Copyright © 2011-2022 走看看