Data structures 这是一个有效的二进制搜索树吗?

Data structures 这是一个有效的二进制搜索树吗?,data-structures,binary-search-tree,Data Structures,Binary Search Tree,若否,原因为何? 如果是,为什么在这个节点上按顺序遍历5,9,12,10,13不会产生一个已排序的节点序列 注意:叶5是9的左子级,叶12是9的右子级。否,它不是有效的搜索树。虽然最高和最低叶片之间的平衡差为1或更小,但10和12的顺序是不正确的 如果它是: 10 / \ / \ 9 13 / \ / \ 5 12 基本规则是,节点的整个左子树中的所有内容都应小于该节点的值。因此,右子树中的所有内容都应该更大 显然,12不

若否,原因为何? 如果是,为什么在这个节点上按顺序遍历5,9,12,10,13不会产生一个已排序的节点序列


注意:叶5是9的左子级,叶12是9的右子级。

否,它不是有效的搜索树。虽然最高和最低叶片之间的平衡差为1或更小,但10和12的顺序是不正确的

如果它是:

      10
     /  \
    /    \
   9      13
  / \ 
 /   \
5    12
基本规则是,节点的整个左子树中的所有内容都应小于该节点的值。因此,右子树中的所有内容都应该更大

显然,12不小于10,所以给定的树不如二叉搜索树好。如果您查找12,那么从根节点开始要做的第一件事就是下降到正确的子树中,在那里您将无法找到它

可以使用以下递归伪代码验证二进制搜索树:

     12
    /  \
   /    \
  9      13
 / \
5   10

10和12是错误的。。12大于10。。所以它应该是根。可能的副本,我假设我们只考虑唯一的左右儿童进行比较。然而,事实是我们应该考虑子子树中的所有节点进行比较。
def isValid (node):
    # Gone below leaf, so is valid.

    if node == NULL:
        return true

    # Check immediate children if they're there.

    if node.left <> NULL:
        if node.value < node.left.value:
            return false

    if node.right <> NULL:
        if node.value > node.right.value:
            return false

    # Check individual sub-trees (both must be valid).

    if not isValid (node.left):
        return false

    return isValid (node.right)
wholeTreeValid = isValid (root)