Python 二叉搜索树
以下是维基百科上关于BST的一些代码:Python 二叉搜索树,python,algorithm,binary-tree,binary-search-tree,Python,Algorithm,Binary Tree,Binary Search Tree,以下是维基百科上关于BST的一些代码: # 'node' refers to the parent-node in this case def search_binary_tree(node, key): if node is None: return None # key not found if key < node.key: return search_binary_tree(node.leftChild, key)
# 'node' refers to the parent-node in this case
def search_binary_tree(node, key):
if node is None:
return None # key not found
if key < node.key:
return search_binary_tree(node.leftChild, key)
elif key > node.key:
return search_binary_tree(node.rightChild, key)
else: # key is equal to node key
return node.value # found key
如果我在搜索11,然后按照上面的算法,我从10开始,向右搜索12,然后向左搜索9。我到了树的尽头却没有找到11个。
但是11存在于我的树上,它就在另一边
你能解释一下在二叉树中这个算法对我的树有什么限制吗
谢谢。不要混淆二叉树和二叉搜索树。二叉搜索树(简称BST)是一种特殊类型的二叉树,左侧的所有节点都小于或等于父节点,右侧的所有节点都大于父节点
而您给出的示例只是一个二叉树,而不是一个二叉搜索树。您可以看到,值11和14留给违反BST属性的父节点10。查看二进制搜索树。您将节点14和11放置在错误的位置。发件人:
- 节点的左子树仅包含键小于 节点的键
- 节点的右子树仅包含键大于 节点的键
- 左子树和右子树也必须是二进制搜索树
正如您所看到的,14和11都大于8。您在非BST中显示的树。11和14永远不会插入到10的左侧,这就是算法不在那里搜索的原因。9也不合适 根据维基百科插入: 插入开始于搜索开始时;如果根不等于该值,我们将像以前一样搜索左子树或右子树。最终,我们将到达一个外部节点,并根据节点的值将值添加为其右或左子节点。换句话说,我们检查根,如果新值小于根,则递归地将新节点插入左子树;如果新值大于或等于根,则递归地将新节点插入右子树 如果二叉树具有以下属性(同样来自Wikipedia),则可以判断它是BST:
这只是因为您的树不是二叉搜索树:它的顺序不正确。BST实际上是按照算法中的描述构建的。例如,在树中:节点“9”不在正确的位置,因为当9<10时,它应该位于根节点“10”的左分支之下。与“14”和“11”相同,它们应位于右侧分支上 例如,BST可以是这样的:
10
5 11
3 8 12
14
您的树不是二叉搜索树您将父节点称为什么?如果左侧的所有节点都小于或等于祖先节点,但不等于右侧的父节点,这会有意义吗?我的意思是4,而不是14。我修复了这棵树。请参阅此链接了解所有行话。非常感谢佩罗兹。这就解释了我没有得到的关于BST的部分:)
10
5 11
3 8 12
14