2015-12-02 80 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不是空;