簡體   English   中英

二進制搜索樹分配給父級

[英]Binary Search Tree Assign to Parent

我有一個關於從二叉搜索樹函數中刪除部分的問題。

switch (childCount){
    case 0: // It has no children then remove parent
        if(current.value < parent.value){
        parent.left = null;
        } else{
        parent.right = null;
        }
       break;
    case 1: //it has 1 children, reassign to parent
         if(current.value < parent.value){
         parent.left = (current.left === null ? current.right :   curent.left);
         } else {
        parent.right = (current.left === null ? current.right :   current.left);
         }  
        break;

我不是很了解情況1,還有parent.left和parent.right的值。 (current.left === null?current.right:curent.left)到底是什么意思? 語法讓我失望。 我知道這是指這樣一個情況,如果它有一個孩子,只需重新分配給父母即可。 但是我還是很困惑

謝謝,

parent.left = (current.left === null ? current.right : curent.left);

手段

if (current.left === null)
    parent.left = current.right;
else
    parent.left = curent.left;

詳細信息請參見: Wikipedia-三元運算符

因此,基本上,這就是說,如果當前節點(我們要刪除的節點)只有一個並且只有一個子代,我們必須將當前子代分配為父代的子代,這樣我們就不會從樹上失去該子代。 正如moller所說,分配是三元運算符,因此如果測試

parent.left = (current.left === null ? current.right : curent.left);

計算結果為true parent.left設置為current.right,否則設置為current.left。

所有這些檢查都是為了維護二叉搜索樹的屬性,其中左子級是<=父級,右子級是> parent。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM