二叉查詢樹(增 刪 查)

2021-08-21 05:16:28 字數 2171 閱讀 3991

原理:按照大的向右小的向左原則,沿著樹的根節點往下找,找到第乙個為空的節點或者節點的key和目標key相同時結束,前者插入,後者替換。

/**

*@description: 插入節點

*@param key

*@param value

*@author wjc920

*@date 2023年6月26日

*/public

void

put(k key, v value)

node cur=root;

while(true)

cur=cur.left;

}else

if (cmp > 0)

cur=cur.right;

}else

}}

注:非遞迴

原理:按照大的向右小的向左原則,沿著樹的根節點往下找,找到第乙個為空的節點或者節點的key和目標key相同時結束,前者返回空,後者返回值。

/**

*@description: 獲取鍵key的值

*@param key

*@return

*@author wjc920

*@date 2023年6月26日

*/public v get(k key)

private node get(node node, k key)

原理:按照大的向右小的向左原則,沿著樹的根節點往下找,找到第乙個為空的節點或者節點的key和目標key相同時結束,前者不執行任何操作,後者需要分情況處理:

1. 若待刪除的節點只有乙個子節點(對應**中情況2和3),則用子節點替換該節點即可,結束;

2. 若待刪除節點沒有子節點(對應**中情況4),直接刪除,結束;

3. 若待刪除節點有兩個子節點(對應**中情況1),則查詢該節點的後繼節點,兩者交換,然後將後繼節點設定為待刪除節點,此時回到情況1或2。

/**

*@description: 刪除操作的非遞迴實現

*@param key

*@return

*@author wjc920

*@date 2023年6月30日

*/public v remove(k key) else

if (cmp > 0) else

//尋找target,target.key==key

break; //尋找target,target.key==key

}target=cur;

if(target==null) //如果target==null,則不需要刪除,返回null

return

null; //如果target==null,則不需要刪除,返回null

result=target.value; //如果target!=null,則需要刪除,先將target的value儲存,作為返回結果

if(target.left!=null) //找後繼節點,即大於target的最小節點

replace=cur; //將後繼節點替換tagert

target.key=replace.key; //將後繼節點替換tagert

target.value=replace.value; //將後繼節點替換tagert

if(replace.right!=null) else else //刪除replace

}}else

}else else else }}

return result;

}

二叉搜尋樹 增刪查

性質 每個節點的key值各不相同 左子樹上所有節點的key值小於根結點 右子樹上的所有節點key值大於根結點 左右子樹都是二叉搜尋樹 insert插入 bool insert const k key 非遞迴插入 node cur root node parent null while cur els...

二叉搜尋樹的增刪查改

在實際生產中,一棵二叉搜尋樹的平均深度是log n 所以通常是遞迴的編寫二叉樹的操作 不需要太擔心爆棧的問題。對二叉樹的所有操作,無非就是從根節點 左子樹 右子樹這三者中入手,分析基本的 可能的情況後,再遞迴的編寫相應的操作即可。我們的重點放在insert 操作和 delete 操作中。insert...

二叉搜尋樹的增刪改查

二叉搜尋樹 binary search tree 簡稱 bst,是一種特殊形式的二叉樹。二叉搜尋樹的的結構有兩種可能 對於二叉搜尋樹,需要掌握基本的操作 當要查詢目標值的節點時,我們可以根據二叉樹的結點資料值的有序性 左孩子 根結點 右孩子 根據以下思路進行查詢 簡單實現 返回以目標值結點為根結點的...