亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您如何驗證二叉搜索樹?

您如何驗證二叉搜索樹?

我在這里閱讀了采訪中的一項練習,即驗證二進制搜索樹。這是如何工作的?驗證二叉搜索樹會尋找什么?我已經寫了一個基本的搜索樹,但是從未聽說過這個概念。
查看完整描述

3 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

其實那是每個人在面試中犯的錯誤。


必須根據(minLimitof node,node.value)檢查Leftchild


必須根據(node.value,nodeMaxLimit)檢查Rightchild


IsValidBST(root,-infinity,infinity);


bool IsValidBST(BinaryNode node, int MIN, int MAX) 

{

     if(node == null)

         return true;

     if(node.element > MIN 

         && node.element < MAX

         && IsValidBST(node.left,MIN,node.element)

         && IsValidBST(node.right,node.element,MAX))

         return true;

     else 

         return false;

}

另一個解決方案(如果空間不是約束):對樹進行有序遍歷,并將節點值存儲在數組中。如果數組按排序順序排列,則其有效的BST否則無效。

查看完整回答
反對 回復 2019-11-25
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

“驗證”二進制搜索樹意味著您要檢查它的確確實有所有較小的項目在左側,而較大的項目在右側。本質上,這是檢查二進制樹是否為二進制搜索樹。


查看完整回答
反對 回復 2019-11-25
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

我發現最好的解決方案是O(n),它不占用任何額外空間。它類似于有序遍歷,但不是將其存儲到數組中然后檢查它是否已排序,我們可以采用一個靜態變量,并在有序遍歷時檢查數組是否已排序。


static struct node *prev = NULL;


bool isBST(struct node* root)

{

    // traverse the tree in inorder fashion and keep track of prev node

    if (root)

    {

        if (!isBST(root->left))

          return false;


        // Allows only distinct valued nodes

        if (prev != NULL && root->data <= prev->data)

          return false;


        prev = root;


        return isBST(root->right);

    }


    return true;

}


查看完整回答
反對 回復 2019-11-25
  • 3 回答
  • 0 關注
  • 692 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號