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))
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    嵌入式整体框架——总结
    DSP Bios记忆
    三遥
    usb设备 配置 接口 端点
    ARM, MIPS, Power PC的比较
    STM32 IAP
    FSMC 总结
    BCD码与十进制的相互转换
    读 “cortexM3” 权威指南 小记(一)
    crc校验码的16 32位 查表法 算法记载
  • 原文地址:https://www.cnblogs.com/topass123/p/12655829.html
Copyright © 2011-2022 走看看