赞
踩
定义: 二叉排序树或者是空树,或者满足以下性质
注: 二叉排序树的中序遍历为递增有序序列
数据结构:
class Node():
def __init__(self,value):
self.value = value
self.left = None
self.right = None
def BST_serach(root, value):
if not root: # 遇到空节点,未找到
return False
if root.value == value: # 找到
return True
elif value < root.value: # 若值小于根节点值,继续从左子树中查找
return BST_serach(root.left, value)
else: # 否则,该值大于根节点的值,从右子树中查找
return BST_serach(root.right, value)
对于一个不存在于二叉排序树中的值,其查找不成功的位置即为该值的插入位置
因此,只需要在找到空指针的时候,进行插入
def BST_insert(root, value): if not root: # 遇到空节点,即为插入位置 root = Node(value) return if root.value == value: # 若该值已存在于二叉树中,插入失败 print("Existed!!!") return elif value < root.value: # 若值小于根节点值,继续从左子树中查找插入位置 if not root.left: # 该判断不可删除,会出现无法插入的问题,原因尚未知 root.left = Node(value) return BST_insert(root.left, value) # 注:以上四句不可用 return self.BST_insert(root.right, value)代替, # 会出现节点无法插入的问题 else: # 否则,该值大于根节点的值,从右子树中查找插入位置 if not root.right: root.right = Node(value) return BST_insert(root.right, value)
class BSTree(): def __init__(self, root): self.root = root def serach(self, value): return self.BST_serach(self.root, value) def insert(self, value): self.BST_insert(self.root, value) def print_tree(self): self.BST_print(self.root) def BST_insert(self, root, value): if not root: # 遇到空节点,即为插入位置 print("Insert!!!") root = Node(value) return if root.value == value: # 若该值已存在于二叉树中,插入失败 print("Existed!!!") return elif value < root.value: # 若值小于根节点值,继续从左子树中查找插入位置 if not root.left: print("Insert!!!") root.left = Node(value) return self.BST_insert(root.left, value) else: # 否则,该值大于根节点的值,从右子树中查找插入位置 if not root.right: print("Insert!!!") root.right = Node(value) return self.BST_insert(root.right, value) # 注:以上四句不可用 return self.BST_insert(root.right, value)代替 # 会出现节点无法插入的问题 def BST_serach(self, root, value): if not root: # 遇到空节点,未找到 return False if root.value == value: # 找到 return True elif value < root.value: # 若值小于根节点值,继续从左子树中查找 return self.BST_serach(root.left, value) else: # 否则,该值大于根节点的值,从右子树中查找 return self.BST_serach(root.right, value) def BST_print(self, root): """Middle Serach""" if not root: return self.BST_print(root.left) print(root.value) self.BST_print(root.right)
删除操作较复杂,暂未编写
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。