设为首页 加入收藏

TOP

平衡二叉树(AVL)的实现,附可运行C语言代码(七)
2015-01-22 20:57:15 来源: 作者: 【 】 浏览:85
Tags:平衡 AVL 实现 运行 语言 代码
255 }
256?
257 static BOOL tree_alter(BTree *BT, BTNode *phead, TYPE value, TYPE new_value)
258 {//更改结点的值(先删除,后插入)
259 ? ? if(phead == NULL)
260 ? ? ? ? return 0;
261?
262 ? ? if(value == new_value)
263 ? ? ? ? return 1;
264?
265 ? ? if(BT->del(BT, &phead, value) != 0){
266 ? ? ? ? if(BT->add(BT, phead, new_value) != 0)
267 ? ? ? ? ? ? return 1;
268 ? ? ? ? else
269 ? ? ? ? ? ? return 0;
270 ? ? }
271 ? ? else
272 ? ? ? ? return 0;
273 }
274?
275 static BTNode *tree_search(BTree *BT, BTNode *phead, TYPE value)
276 {//查找结点
277 ? ? BTNode *temp;
278?
279 ? ? if(phead == NULL)
280 ? ? ? ? return NULL;
281?
282 ? ? if(phead->data == value)
283 ? ? ? ? return phead;
284 ? ? if(phead->lchild != NULL){
285 ? ? ? ? temp = BT->search(BT, phead->lchild, value);
286 ? ? ? ? if(temp != NULL)
287 ? ? ? ? ? ? return temp;
288 ? ? }
289 ? ? if(phead->rchild != NULL){
290 ? ? ? ? temp = BT->search(BT, phead->rchild, value);
291 ? ? ? ? if(temp != NULL)
292 ? ? ? ? ? ? return temp;
293 ? ? }
294?
295 ? ? return NULL;
296 }
297?
298 static BTNode *tree_search_min(BTree *BT, BTNode **phead, int flag)
299 {//查找最小结点
300 ? ? BTNode *temp;
301?
302 ? ? if(*phead == NULL)
303 ? ? ? ? return NULL;
304?
305 ? ? if((*phead)->lchild == NULL){
306 ? ? ? ? temp = *phead;
307 ? ? ? ? if(flag == 1)
308 ? ? ? ? ? ? *phead = (*phead)->rchild;
309 ? ? ? ? return temp;
310 ? ? }
311 ? ? else
312 ? ? ? ? return BT->search_min(BT, &(*phead)->lchild, flag);
313 }
314?
315 static BTNode *tree_search_max(BTree *BT, BTNode **phead, int flag)
316 {//查找最大结点
317 ? ? BTNode *temp;
318?
319 ? ? if(*phead == NULL)
320 ? ? ? ? return NULL;
321?
322 ? ? if((*phead)->rchild == NULL){
323 ? ? ? ? temp = *phead;
324 ? ? ? ? if(flag == 1)
325 ? ? ? ? ? ? *phead = (*phead)->lchild;
326 ? ? ? ? return temp;
327 ? ? }
328 ? ? else
329 ? ? ? ? return BT->search_max(BT, &(*phead)->rchild, flag);
330 }
331?
332 static void tree_pre_traverse(BTree *BT, BTNode *phead)
333 {//先序遍历二叉树
334 ? ? if(phead == NULL)
335 ? ? ? ? return;
336?
337 ? ? BT->print(BT, phead);
338 ? ? if(phead->lchild != NULL)
339 ? ? ? ? BT->pre_traverse(BT, phead->lchild);
340 ? ? if(phead->rchild != NULL)
341 ? ? ? ? BT->pre_traverse(BT, phead->rchild);
342 }
343?
344 static void tree_mid_traverse(BTree *BT, BTNode *phead)
345 {//中序遍历二叉树
346 ? ? if(phead == NULL)
347 ? ? ? ? return;
348?
349 ? ? if(phead->lchild != NULL)
350 ? ? ? ? BT->mid_traverse(BT, phead->lchild);
351 ? ? BT->print(BT, phead);
352 ? ? if(phead->rchild != NULL)
353 ? ? ? ? BT->mid_traverse(BT, phead->rchild);
354 }
355?
356 static void tree_last_traverse(BTree *BT, BTNode *phead)
357 {//后序遍历二叉树
358 ? ? if(phead == NULL)
359 ? ? ? ? return;
360?
361 ? ? if(phead->lchild != NULL)
362 ? ? ? ? BT->last_traverse(BT, phead->lchild);
363 ? ? if(phead->rchild != NULL)
364 ? ? ? ? BT->last_traverse(BT, phead->rchild);
365 ? ? BT->print(BT, phead);
366 }
367?
368 static int tree_node_height(BTree *BT, BTNode *phead)
369 {//求节点的高度,写成函数解决指针为空的情况,默认空节点的高度为-1,只有一个根节点的节点的高度为0,每多一层高度加1
370 ? ? if(phead != NULL){
371 ? ? ? ? if(phead->lchild == NULL && phead->rchild == NULL){
372 ? ? ? ? ? ? return 0;
373 ? ? ? ? }
374 ? ? ? ? else{
375 ? ? ? ? ? ? return phead->height = max_height(tree_node_height(BT, phead->lchild), tree_node_height(BT, phead->rchild)
首页 上一页 4 5 6 7 8 9 下一页 尾页 7/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Objective-C中的集合类 下一篇组合数计算C(n,m)加取模情况

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: