二叉排序樹

2021-05-28 16:38:32 字數 2267 閱讀 8460

/*

name: 二叉排序樹相關操作

author: unimen

date: 2011/10/8 13:14:21

*//*

刪除結點比較麻煩,總結如下:

4大種情況

1、結點p無右孩子:將該點的左孩子變為其在雙親中的同位孩子

1、p為其雙親的左孩子時將其的左孩子變為雙親的左孩子

2、p為其雙親的右孩子時將其的左孩子變為雙親的右孩子

2、結點p無左孩子:將該結點的右孩子變為其在雙親中的同位孩子

1、p為其雙親的左孩子時將其的右孩子變為雙親的左孩子

2、p為其雙親的右孩子時將其的右孩子變為雙親的右孩子

3、節點p既無左孩子也無右孩子:前面的兩種處理其實已經包含了這種情況

4、節點p既有左孩子也有右孩子:兩種處理辦法:後繼,前驅

一、後繼替換:先找到p的後繼此時分兩種情況

1、後繼s就是p的右孩子(也就說s無左子樹),這時用s結點的值替換p結點的值,將s的

右孩子變為p的右孩子

2、後繼s是p右孩子的左子樹中的最後乙個左節點,這時用s結點的值替換p結點的值,將s的

右孩子變為s雙親的左孩子

二、前驅替換:同樣先找到p的前驅,這時也有兩種情況

1、前驅s就是p的左孩子(也就說s無右子樹),這時用s結點的值替換p結點的值,將s的

左孩子變為p的左孩子

2、前驅s是p左孩子的右子樹中的最後乙個右結點,這時用s結點的值替換p結點的值,將s的

左孩子變為s雙親的右孩子

注:前驅和後繼方法差不多,畫出圖來就一目了然了

*/#include #include using namespace std;

//資料結構

const int maxn = 10000;

typedef struct node

bst, *pbst;

//插入操作,建樹時將用其

void insert(pbst &pdst, const pbst &psrc)

else if (pdst->ndata < psrc->ndata)

else if (pdst->ndata > psrc->ndata)

else }

//建立 以ctrl+z結束輸入

void create(pbst &root)

//使輸入流處於正確狀態

cin.clear();

char ctemp;

ctemp = cin.get();

}//中序遍歷

void inorder(pbst root)

else

}}//刪除特定結點

void delete(pbst pdelete, pbst pparent)

else

delete pdelete;

} //左子樹為空

else if (pdelete->plchild == null)

else //如果pdelete為pparent的右子樹

delete pdelete;

} //左右子樹都不為空

//前驅方法

else

pdelete->ndata = s->ndata;

if (pdelete != q) //第二種情況

else //第一種情況

delete s;

} /*後繼方法

else

pdelete->ndata = s->ndata;

if (q != pdelete) //第一種情況

else //第二種情況}*/

}//查詢給定值的結點的指標,pparent返回其雙親結點

void searchbst(pbst root, pbst &pparent, pbst &ppoint, const int &value)

else if (root->plchild!=null && root->plchild->ndata==value)

else if (root->prchild!=null && root->prchild->ndata==value)

else if (value < root->ndata)

else }

int main()

二叉排序樹

在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...

二叉排序樹

include include include include struct tree node void insert node struct tree node int void pre order struct tree node void in order struct tree node ...

二叉排序樹

二叉排序樹的 搜尋 插入 刪除節點的c語言描述的演算法。main 中用了一組測試資料 include stdio.h include stdlib.h define max 6 typedef struct node node,nodep int deletebst nodep r,int key ...