Data structures 这是一个有效的二进制搜索树吗?
若否,原因为何? 如果是,为什么在这个节点上按顺序遍历5,9,12,10,13不会产生一个已排序的节点序列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是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)