这是一个有效的二叉搜索树吗?

时间:2014-06-17 04:20:00

标签: data-structures binary-search-tree

      10
     /  \
    /    \
   9      13
  / \ 
 /   \
5    12

如果不是,为什么? 如果是的话,为什么在这个问题上进行遍历(5,9,12,10,13)会产生一个排序的节点序列?

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

1 个答案:

答案 0 :(得分:0)

不,它不是有效的搜索树。虽然它的平衡(最高和最低叶子之间的差异是一个或更少),但1012的顺序不正确。

如果是:

将是有效的
     12
    /  \
   /    \
  9      13
 / \
5   10

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

显然12 小于10因此您的给定树作为二叉搜索树并不太好。如果您去寻找12,那么您从根节点开始做的第一件事就是进入子树,在那里您将无法找到它

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

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)