二叉排序树(Binary Sort Tree),亦称二叉搜索。
特点:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的结点。
平均查找长度= 每个结点的深度的总和 / 总结点数
二叉排序树的搜索:
![](http://img.e-com-net.com/image/info8/2b246dbcfe82488397e9aa432bbc4e31.gif)
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()
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))