因為在關聯容器裡面主要的內部結構是rb-tree,而紅黑樹又是一種平衡二叉樹,平衡二叉樹又是屬於二叉查詢樹,所以按照 侯捷介紹的順序依次來實現,今天先把二叉查詢樹這種最簡單的實現掉:
首先,二叉查詢樹 不像heap中完全二叉樹那樣記憶體分配用線性儲存的,二叉查詢樹一般內部儲存是通過鍊錶來實現的,首先來看每個節點的資料結構:
每個節點都包含了它的孩子節點資訊,這樣可以很方便的向下遞迴查詢。
因為二叉查詢樹是要求 左子節點《父節點《右子節點。根據每個節點的結構,我們在樹中只需要包含root節點就可以遍歷到整個樹了,所以在樹中,我們必須包含root 節點,而且只需要root 節點就可以了,所以在tree中我們的成員變數為:
private:
pnode root;
其中的pnode 是節點指標型別 即: node*
如果我們要插入資料到樹中,那麼我們只需要下面幾步就可以了:
1.給需要插入的值 分配乙個節點空間。
2.通過遞迴找到需要插入的地方,即找到他的父節點。
3.把這個節點位址賦給父節點的左孩子或者右孩子。
首先實現第一步:
那麼 2,3怎麼來實現呢:
通過乙個遞迴函式:
同樣,如果我們要刪除乙個元素,那麼 我們也可以通過下面步驟:
1.找到需要填充到這個位置的葉子節點。
2.把葉子節點的值賦給要刪除的這個元素。
3.刪除這個葉子節點。
關鍵是第一步,怎麼找到要替換的節點,其實我們只要找到以這個節點為跟節點的子樹中比這個節點稍大點的節點就可以了,怎麼找到比這個節點稍大點呢,就是這個節點的右子樹中最左邊的乙個葉子節點。
其中 destroynode是指刪除指定空間。
完整**如下:
二叉查詢樹,實現
public class binarytree 移除乙個節點 分三種情況,乙個是 該節點本身是葉子,乙個是 該節點含有乙個兒子節點 乙個是 該節點還有兩個兒子節點 param e param comareelement private binarynoderemove element e,binar...
二叉查詢樹的實現
初學者實現了二叉查詢樹的實現 實現的功能包括 建構函式 西溝函式 判空函式 遞迴搜素 非遞迴搜尋 刪除元素 前序遍歷 中序遍歷 後續遍歷 層遍歷 沒有實現 直接上 吧,請大牛指導 標頭檔案 bst.h includeusing namespace std ifndef bst define bst ...
二叉查詢樹的實現
首先構架一顆二叉查詢樹 對於該二叉樹 先序遍歷 6,2,1,5,3,4,7,8 中序遍歷 1,2,3,4,5,6,7,8 後序遍歷 1,4,3,5,2,8,7,6 對於刪除操作 若刪除的節點尾葉子節點 則直接刪除 若刪除的節點存在乙個葉子節點 則將當前節點父節點的引用直接指向當前節點的子節點 葉子節...