二叉排序樹

2022-07-12 03:57:14 字數 2506 閱讀 1613

1 #include2 #include3

4#define true 1

5#define false 0

6#define elemtype int

7#define keytype int89

10/*

二叉排序樹的節點結構定義

*/11 typedef struct

bitnode

12 bitnode, *bitree;

1617

18/*

二叉排序樹查詢演算法

*/19

int searchbst(bitree t, keytype key, bitree f, bitree *p)

2027

//如果相等,令 p 指標指向該關鍵字,並返回查詢成功資訊

28else

if (key == t->data)

2933

//如果 key 值比 t 根結點的值小,則查詢其左子樹

34else

if (key < t->data)

3538

//如果 key 值比 t 根結點的值大,則查詢其右子樹

39else

4043}44

4546

int insertbst(bitree *t, elemtype e)

4762

63//

如果 p 不為 null,則 p 指向的為查詢失敗的最後乙個葉子結點,只需要通過比較 p 和 e 的值確定 s 到底是 p 的左孩子還是右孩子

64else

if (e < p->data)

6568

else

6972

73return

true;74}

7576

//如果查詢成功,不需要做插入操作,插入失敗

77return

false;78}

7980

//刪除函式

81int delete(bitree *p)

8289

90else

if (!(*p)->lchild) //

左子樹為空,只需用結點 p 的右子樹根結點代替結點 p 即可;

9196

97else

if (!(*p)->rchild) //

右子樹為空,只需用結點 p 的左子樹根結點代替結點 p 即可;

98103

104else

//左右子樹均不為空,採用直接前驅來代替需要刪除的結點

105114

115//

直接改變結點 p 的值

116 (*p)->data = s->data;

117118

//判斷結點 p 的左子樹 s 是否有右子樹,分為兩種情況討論

119if (q != *p)

120123

else

124127

free

(s);

128}

129return

true;

130}

131132

int deletebst(bitree *t, int

key)

133138

else

139145

else

if (key < (*t)->data)

146150

else

151154

}155

}156

157158

void order(bitree t)//

中序輸出

159164 order(t->lchild);

165 printf("

%d ", t->data);

166 order(t->rchild);

167}

168169

170int

main()

171188

189//

中序輸出二叉排序樹

190 printf("

中序遍歷二叉排序樹:\n");

191order(t);

192 printf("\n"

);193

194//

刪除操作

195 printf("

請輸入您想要刪除的元素:\n");

196int

x1;197 scanf("

%d", &x1);

198 deletebst(&t, x1);

199if(deletebst(&t, x1))

200205

else

206209 printf("

-------------------------------------\n");

210}

211return0;

212 }

二叉排序樹

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

二叉排序樹

name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...

二叉排序樹

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 ...