二叉搜尋樹的插入和刪除
阿新 • • 發佈:2018-12-24
插入:比較簡單,只需要確認這個元素是否在二叉樹中存在
刪除:T Insert(Tree T,int Element){ if(!T){ T=(Tree)malloc(sizeof(***)); T->data = Element; T->Left=T->Right=NULL; return T; } if(Element < T->data){ Insert(T->Left,Element); } if(Element > T->data){ Insert(T->Right,Element); } else return NULL; }
先用遞迴組織好查詢順序,再執行刪除
如果兩子樹都不空,用右子樹最小的來替代(或者用左子樹最大的來替代)
如果一個空,用一個子樹來替代
如果兩個空,free這個節點
T Delete(Tree T,int Element){ if(!T) return NULL; if(Element > T->Data) Delete(T->Right,Element); if(Element < T->Data) Delete(T->Right,Element); else{ if(T->Left && T->Right){ int temp = findMin(T->Right); T->Element = temp; Delete(T->Right,temp); } else{ tempT = T; if(T->Left == NULL){ T=T->Right; } else if(T->Right == NULL); T=T->Left; free(tempT); } } }
T findMin(Tree T){
if(T == NULL)
return NULL;
if(T->Left == NULL) return T;
return findMin(T->Left);
}
T findMax(Tree T){
if(T == NULL)
return NULL;
if(T->Right == NULL) return T;
return findMin(T->Right);
}