如果二进制搜索树是二进制搜索树,则分析代码

时间:2018-05-24 06:58:48

标签: python binary-search-tree

我正在查看二进制树是否为BST的代码,我对如何进行比较感到困惑。

def is_bst(cur_node, prev_node_list):
    if (not cur_node):
        return True

    #Check if the left sub-tree is a BST
    if (not TreeNode.is_bst(cur_node.left, prev_node_list)): 
        return False

    #If data in cur_node is <= previous node then it is not a BST
    prev_node = prev_node_list[0]
    if (prev_node and cur_node.data <= prev_node.data):
        return False

    #Update previous node to current node
    prev_node_list[0] = cur_node

    #Check if the right sub-tree is a BST
    return TreeNode.is_bst(cur_node.right, prev_node_list) 

我想知道是什么

if (prev_node and cur_node.data <= prev_node.data):
  return False

正在做。如果代码不断检查左子树,那么下一个值是不是应该小于前一个节点?

1 个答案:

答案 0 :(得分:1)

代码按排序顺序访问所有元素。也就是说,第一个左节点然后是当前节点而不是右节点。 如果使用print语句将检查替换为上一个节点,则可以获得从最小到最大的元素(如果树有效)。

现在,检查是否对这些必要元素进行了排序就足够了。

回答您的问题:在左侧节点之后检查当前节点。代码首先进入最左边的叶节点。