10
/ \
/ \
9 13
/ \
/ \
5 12
如果不是,为什么? 如果是的话,为什么在这个问题上进行遍历(5,9,12,10,13)会产生一个排序的节点序列?
注意:叶子5是9的子,叶子12是9的右子。
答案 0 :(得分:0)
不,它不是有效的搜索树。虽然它的平衡(最高和最低叶子之间的差异是一个或更少),但10
和12
的顺序不正确。
如果是:
将是有效的 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)