首先構架一顆二叉查詢樹
對於該二叉樹
:先序遍歷
:6,2,1,5,3,4,7,8
中序遍歷
:1,2,3,4,5,6,7,8
後序遍歷
:1,4,3,5,2,8,7,6
對於刪除操作
.若刪除的節點尾葉子節點
,則直接刪除
若刪除的節點存在乙個葉子節點
,則將當前節點父節點的引用直接指向當前節點的子節點
(葉子節點
)若刪除的節點存在兩個節點
,需要將當前節點的右子樹中最小的節點值賦給當前節點
,再將當前節點刪除
;新建乙個
node物件;
packagecom.deng.tree;
publicclassnode
publicvoiddisplaynode() }
建立乙個二叉查詢樹
packagecom.deng.tree;
publicclasstreeelse}
returncurrentnode; }
/* *
插入節點 */
publicvoidinsert(intkey,intvalue)
// 定義兩個節點
,乙個表示父節點
,乙個表示當前節點
nodecurrentnode= root;
nodeparentnode= root;
booleanisleftchild=true;
while(currentnode !=null)else}
nodenewnode=newnode(key, value);
if(isleftchild)else}
/* *
刪除節點
: 1.
若當前節點尾葉子節點直接刪除
; 2.
若當前節點有乙個孩子節點
,只需將該節點的父節點的左孩子節點引用指向當前節點的孩子節點即可
* 3.
若當前節點有兩個孩子節點
, (1),
首先對當前節點的父節點
,進行中循遍歷
,獲得當前節點的後繼節點的值
,並刪除當前節點
(2)而後將該值賦給當前節點即可 */
publicbooleandelete(intkey)else}
if(currentnode ==null)
if(currentnode.leftchild ==null&& currentnode.rightchild ==null)elseif(isleftchild)else
}elseif(currentnode.rightchild ==null)elseif(isleftchild)else
}elseif(currentnode.leftchild ==null)elseif(isleftchild)else
}else
returntrue; }
/* *
該方法為得到待刪節點的直接後繼節點 */
privatenodegetdirectpostnode(nodedelnode)
if(directpostnode != delnode.rightchild)
returndirectpostnode;//
返回次直接後繼節點 }
/* *
先序遍歷 */
publicvoidpreorder(noderootnode) }
/* *
中序遍歷 */
publicvoidinorder(noderootnode) }
/* *
後序遍歷 */
publicvoidpostorder(noderootnode) }
}測試結果:
二叉查詢樹,實現
public class binarytree 移除乙個節點 分三種情況,乙個是 該節點本身是葉子,乙個是 該節點含有乙個兒子節點 乙個是 該節點還有兩個兒子節點 param e param comareelement private binarynoderemove element e,binar...
二叉查詢樹的實現
因為在關聯容器裡面主要的內部結構是rb tree,而紅黑樹又是一種平衡二叉樹,平衡二叉樹又是屬於二叉查詢樹,所以按照 侯捷介紹的順序依次來實現,今天先把二叉查詢樹這種最簡單的實現掉 首先,二叉查詢樹 不像heap中完全二叉樹那樣記憶體分配用線性儲存的,二叉查詢樹一般內部儲存是通過鍊錶來實現的,首先來...
二叉查詢樹的實現
初學者實現了二叉查詢樹的實現 實現的功能包括 建構函式 西溝函式 判空函式 遞迴搜素 非遞迴搜尋 刪除元素 前序遍歷 中序遍歷 後續遍歷 層遍歷 沒有實現 直接上 吧,請大牛指導 標頭檔案 bst.h includeusing namespace std ifndef bst define bst ...