码迷,mamicode.com
首页 > 编程语言 > 详细

一步两步学算法之二叉搜索树

时间:2015-05-14 18:08:35      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

Binary Search Tree  又叫二叉查找树,二叉排序树

这是种什么样的树呢?

其实就是根节点的左子树比根节点小  右子树比根节点大  同时 左子树和右子树也是二叉搜索树

代码比较简单 基本用递归实现 比较好理解  只有删除带有左右子树的节点时比较难理解

方法就是 直接在右子树找一个最小的节点 取代要被删除的节点 再继续删除右子树里的节点

详细看代码

 1 #include "stdio.h"
 2 #include "stdlib.h"
 3 typedef struct BinTree
 4 {
 5     int data;
 6     struct BinTree *left;
 7     struct BinTree *right;
 8 }BinTree;
 9 
10 BinTree *BinTreeFind(int key,BinTree *t)
11 {
12     while(!t)
13     {
14         if(key>t->data)
15             t=t->right;
16         else if(key<t->data)
17             t=t->left;
18         else
19             return t;    
20     }
21     return NULL;
22 }
23 
24 BinTree *BinTreeInsert(int key,BinTree *t)
25 {
26     if(!t)
27     {
28         t=(BinTree*)malloc(sizeof(BinTree));
29         t->data=key;
30         t->left=NULL;
31         t->right=NULL;
32     }
33     else if(key>t->data)
34         t->right=BinTreeInsert(key,t->right);
35     else if(key<t->data)
36         t->left=BinTreeInsert(key,t->left);
37     else
38         return t;
39 }
40 BinTree *Findmin(BinTree *t)
41 {
42     if(t)
43     {
44         while(t->left)
45             t=t->left;
46     }
47     return t;
48 }
49 BinTree *Delete(int key,BinTree *t)
50 {
51     BinTree *temp;
52     if(!t)
53         printf("删除失败");
54     else if(key<t->data)
55         t->left=Delete(key,t->left);
56     else if(key>t->data)
57         t->right=Delete(key,t->right);
58     else if(t->left && t->right)
59     {
60         temp=Findmin(t->right);
61     
62         t->data=temp->data;
63         t->right=Delete(t->data,t->right);
64     } 
65     else
66     {
67         temp=t;
68         if(!t->left)
69             t=t->right;
70         else if(!t->right)
71             t=t->left;
72         free(temp);
73     }
74 }

 

一步两步学算法之二叉搜索树

标签:

原文地址:http://www.cnblogs.com/threezj/p/4503699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!