Python 二叉搜索树

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)

以下是维基百科上关于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)
     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