我正在查看二进制树是否为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
正在做。如果代码不断检查左子树,那么下一个值是不是应该小于前一个节点?
答案 0 :(得分:1)
代码按排序顺序访问所有元素。也就是说,第一个左节点然后是当前节点而不是右节点。 如果使用print语句将检查替换为上一个节点,则可以获得从最小到最大的元素(如果树有效)。
现在,检查是否对这些必要元素进行了排序就足够了。
回答您的问题:在左侧节点之后检查当前节点。代码首先进入最左边的叶节点。