二叉查找树代码实现
🐎

二叉查找树代码实现

Date
Property
二叉查找树的Python代码实现
Created
Jun 13, 2022 11:15 AM
Tags
二叉查找树
数据结构

代码实现

""" 二叉查找树 - 如果左子树不为空,则左子树上所有节点的值均小于根节点的值。 - 如果右子树不为空,则右子树上所有节点的值均大于根节点的值。 - 左、右子树也都是二叉查找树。 二叉查找树是一种动态树表,其存在形式也不是唯一的,对于特定的数组也可以有多种结构存在,因此其核心功能在于search实现; 插入和删除操作都是在search上进行操作,不需要对整体结构改变太多; 删除操作需要考虑多种情况来进行实现 """ class BST: def __init__(self, node_list): pass def search(self, node, parent, val): # 判断和当前节点值的大小关系后,进行迭代判断 if node is None: return False, node, parent if node.val == val: return True, node, parent if node.val > val: return self.search(node.left, node, val) else: return self.search(node.right, node, val) def insert(self, val): # 二叉查找树是一种动态树表,树的结构通常都不是一次直接生成的 flag, n, p = self.search(self.root, self.root, val) # 通过search查找到需要插入的node if not flag: new_node = TreeNode(val) if val > p.val: p.right = new_node else: p.left = new_node pass def delete(self, root, val): """ 存在三种情况: 1. 如果是叶子节点,可以直接删除; 2. 如果节点只有一个子节点,可以将parent的指针指向其子节点; 3. 如果节点有两个子节点,则将其右子树的最小数据代替此节点的数据,并将右子树最小数据节点删除 """ flag, n, p = self.search(self.root, self.root, val) if not flag: return 'error!' else: if n.left is None: if n == p.left: p.left = n.right else: p.right = n.right del p elif n.right is None: if n == p.left: p.left = n.left else: p.right = n.left del p else: pre = n.right if pre.left is None: n.val = pre.val n.right = pre.right del pre else: next = pre.left while next.left: pre = next next = next.left n.val = next.val pre.left = next.right del p

参考