2015-12-02 82 views
0

我在网上遇到这个问题,我写了下面的函数来检查BST是否有效。然而,我不完全理解的是,max/min如何从null更改为值,您可以比较。所以在下面的函数:检查二进制搜索树是否有效javascript

//Give the recursive function starting values: 

function checkBST(node) { 
    // console.log(node.right); 
    return isValidBST(node, null, null); 
} 


function isValidBST(node, min, max) { 
    console.log(min, max); 


    if (node === null) { 

    return true; 
    } 

    if ((max !== null && node.val > max) || (min !== null && node.val < min)) { 

    return false; 
    } 

    if (!isValidBST(node.left, min, node.val) || !isValidBST(node.right, node.val, max)) { 

    return false; 
    } 
    return true; 
} 



var bst = new BinarySearchTree(8); 
bst.insert(3); 
bst.insert(1); 
bst.insert(6); 
bst.insert(10); 
bst.insert(4); 

当你回来了从左侧的最低深度它在最低深度的值与深度正上方进行比较(即,当1 3是输出)。不知怎么,分钟从空到1,我不知道如何,我认为你需要某种基本情况下的最低限度从空改为其他... 我在控制台中得到这个时,我的控制台.log每次运行的最小/最大值。

null null 
null 8 
null 3 
null 1 
1 3 
3 8 
3 6 
3 4 
4 6 
6 8 
8 null 
8 10 
10 null 
+0

您正在使用此表达式显式调用带有非空值的isValidBST“if(!isValidBST(node.left,min,node.val)||!isValidBST(node.right,node.val,max)){ ' – bhspencer

+0

对,但如何? min如何成为非空值? – devdropper87

+1

因为你传入了node.val'isValidBST(node.right,node.val,max)',所以node.val一定不能为空。 – bhspencer

回答

1

变量min变为非空,因为你明确地调用

isValidBST(node.right, node.val, max)

你在哪里node.val传递作为帕拉姆min。它必须是在您拨打此电话node.val不是空;