對於二叉樹的刪除操作來說,存在三種情況
**1.**當刪除節點為葉節點的時候,此時將節點置為空
**2.**當刪除節點為根節點且該根節點只有乙個子樹的時候,此時需要替換掉刪除元素,最後再進行釋放
**3.**當刪除節點為根節點且根節點存在兩個子樹的時候,此時我們可以選擇替換左子樹的最大元素,或者右子樹的最小元素
c**如下
tree de_tree
(item data, tree t)
//二叉樹元素的刪除
else}if
(!ftree)
//如果沒有找到要刪除的元素的話 直接返回t
return t;
///刪除的第一種情況 當找到的元素為葉節點的時候if(
!ftree->lchild &&
!ftree->rchild)
else
if(ftree == parent->lchild)
//該葉節點為左子樹
else
return t;
}///刪除的第二種情況 左子樹或右子樹為空
elseif(
!ftree->lchild ||
!ftree->rchild)
else
free
(ftree)
;return t;
}///刪除的第三種情況 也就是當左子樹和右子樹都不為空的情況下進行刪除
///此時可以選擇將刪除元素替換為左子樹的最大值和右子樹的最小值
else
ftree->element = curtree->element;
//交換最大值
if(parent == ftree)
//表示左子樹的最大值為要刪除元素的左子樹
parent->lchild = curtree->lchild;
//跳過該元素
else
parent->rchild = curtree->lchild;
//因為已經交換了最大值,那麼我們就需要跳過該節點
free
(curtree)
;return t;
}}
**已經很詳細的解釋了如何進行操作的,祝大家學習順利! 二叉樹的新增 刪除 查詢操作
binarytree類 package tree public class binarytree,value 獲取樹中元素的個數 public int size 向樹中新增元素key value public void put key key,value value 向指定的樹x中新增key val...
二叉查詢樹中元素的刪除操作
關於二叉查詢樹的建立,插入,遍歷 記住二叉查詢樹的中序遍歷是所有元素由大到小排序結果 等操作,博主 c小加 寫的很詳細了,我主要補充bst的刪除操作。刪除操作主要難在對左右子節點都非空的節點的刪除操作,這裡可以找到該節點右節點中的最小值,即右子節點中的最左子樹。找到後和需要刪除的節點交換data等資...
二叉查詢樹(二叉排序樹)建立,插入,刪除操作。
尋找節點就是直接依據數值的大小。從root節點開始遍歷,大於當前遍歷節點就向它的右子樹查詢,相反則查詢它的左子樹。然後返回。直接依據root節點,遍歷到最右就是最大節點,遍歷到最左,就是最小節點。插入節點我這裡插入的節點都會成為葉子節點。依據大小的關係向下遍歷,遍歷到最後的節點,然後插入就能夠了。這...