用Python实现二叉搜索树
2023-04-11 00:00:00
python
下面是使用Python实现二叉搜索树的详细代码演示:
class Node(object): def __init__(self, data): self.data = data self.left = None self.right = None class BinarySearchTree(object): def __init__(self): self.root = None def insert(self, data): new_node = Node(data) if self.root is None: self.root = new_node else: curr_node = self.root while curr_node is not None: if data < curr_node.data: if curr_node.left is None: curr_node.left = new_node break else: curr_node = curr_node.left else: if curr_node.right is None: curr_node.right = new_node break else: curr_node = curr_node.right def search(self, data): curr_node = self.root while curr_node is not None: if curr_node.data == data: return True elif data < curr_node.data: curr_node = curr_node.left else: curr_node = curr_node.right return False def inorder_traversal(self, curr_node, traversal): if curr_node is not None: self.inorder_traversal(curr_node.left, traversal) traversal.append(curr_node.data) self.inorder_traversal(curr_node.right, traversal) return traversal bst = BinarySearchTree() bst.insert(50) bst.insert(30) bst.insert(20) bst.insert(40) bst.insert(70) bst.insert(60) bst.insert(80) print(bst.search(20)) # True print(bst.search(90)) # False inorder_list = bst.inorder_traversal(bst.root, []) print(inorder_list) # [20, 30, 40, 50, 60, 70, 80]
在以上代码中,定义了两个类:Node表示二叉搜索树的节点,BinarySearchTree表示二叉搜索树。
Node类包含了数据data、指向左子树的指针left和指向右子树的指针right。BinarySearchTree类包含了根节点root,并定义了插入节点、查找数据、中序遍历的方法。
插入节点的方法从根节点开始,如果根节点为空,就将新节点作为根节点;否则遍历二叉搜索树,找到合适的位置插入节点。
查找数据的方法同样遍历二叉搜索树,根据数据的大小判断是向左子树还是向右子树搜索,直到找到目标数据或遍历完整个树。
中序遍历的方法使用递归实现,先遍历左子树,再遍历节点本身,最后遍历右子树。中序遍历的结果是有序的,因此可以用于排序操作。
通过以上实现,我们可以创建二叉搜索树,插入新节点、查找数据和中序遍历。在实际应用中,二叉搜索树还可以用于解决一些其他问题,例如寻找能够排序的最大深度、判断两棵树是否相同等。
相关文章