基於二叉查詢樹的符號表

2021-07-11 03:55:51 字數 2584 閱讀 4244

1.資料表示

我們巢狀定義乙個私有node類來表示二叉查詢樹上的乙個結點。每個結點都含有乙個鍵,乙個值,一條左鏈結,一條右鏈結。左鏈結指向一棵由小於該結點的所有鍵組成的二叉查詢樹,右鏈結指向一棵由大於該結點的所有鍵組成的二叉查詢樹。變數n給出以該結點為根的子樹的結點總數。這樣有

size(x) = size(x.left) + size(x.right) + 1

2.查詢

在符號表中查詢乙個鍵有兩種結果:命中和未命中。

在二叉查詢樹中查詢乙個鍵:

-- 如果樹為空,查詢未命中

--如果查詢的鍵與根節點的鍵相等,返回根節點的值

--如果查詢的鍵比根節點的鍵大,則查詢根節點的右子樹

--否則,查詢根節點的左子樹

//根據鍵找對應的值,如果找不到返回null

public value get(key key)

private value get(node x, key key)

return null;

}

3.插入

插入的邏輯:

--如果樹為空,建立對於鍵值對的新結點

--如果插入的鍵小於根結點的鍵,繼續向左子樹中插入該鍵

--否則在右子樹中插入該鍵

//向樹中插入結點

public void put(key key, value val)

private node put(node x, key key, value val)

4.有序性相關

最小鍵

--如果根結點左子樹為空,那麼根結點為最小鍵

--如果左鏈結非空,那麼最小鍵為左子樹的最小鍵

//找到最小的鍵

public key min()

private key min(node x)

return x.key;

}

最大鍵與最小鍵類似,不再贅述。

5.刪除操作

二叉查詢樹中對較難實現的方法就是delete()方法。我們先考慮deletemin()方法。對於deletemin(),我們要不斷深入根結點的左子樹 

直至遇到乙個空連線,然後將指向該結點的鏈結指向該結點的右子樹。

public void deletemin() 

private node deletemin(node x)

deletemax()與此類似,不再贅述

接下來我們考慮delete()方法,我們用四個步驟完成將x替換為它的後繼結點。

--將指向即將被刪除的結點的鏈結儲存為t

--將x指向他的後繼結點min(t.right)

--將x的右鏈結指向deletemin(t.right),也就是在刪除後所有結點都大於x.key的子二叉查詢樹

--將x的左鏈結設為t.left

public void delete(key key) 

private node delete(node x, key key)

x.n = size(x.left) + size(x.right) + 1;

return x;

}

最後附上完整**:

package com.tong.test;

public class bst, value>

} //返回二叉搜尋樹的結點數

public int size()

private int size(node x)

//根據鍵找對應的值,如果找不到返回null

public value get(key key)

private value get(node x, key key)

return null;

} //向樹中插入結點

public void put(key key, value val)

private node put(node x, key key, value val)

//找到最小的鍵

public key min()

private node min(node x)

return x;

} public void deletemin()

private node deletemin(node x)

public void delete(key key)

private node delete(node x, key key)

x.n = size(x.left) + size(x.right) + 1;

return x;

} public static void main(string args)

}

符號表 二叉查詢樹

實現了二叉查詢樹的 插入,查詢,獲取最大 最小值,刪除最大 最小值,按照給定的鍵值刪除鍵值,向上取整等方法。如下 標頭檔案如下 bst.h created on 2014年6月28日 author zhongchao ifndef bst define bst include include inc...

基於二叉查詢樹的符號表(java)

package bst public class bstcomparable value public intsize private intsize node x public value get key key private value get node x,key key public vo...

符號表 二叉查詢樹的簡單學習

所有學習內容全部來自於 演算法 第四版 二叉查詢樹是符號表的一種實現。符號表,又稱為字典,或者索引之類的。主要目的就是講乙個鍵和乙個值聯絡起來,能夠通過鍵增刪改查等操作。符號表有二叉查詢樹 紅黑樹以及雜湊表的實現。基於這些演算法,能夠擴充套件出很多應該用。主要實現如下方法 key的話需要繼承於com...