点击(此处)折叠或打开
- typedef struct BiTNode
- {
- int data;
- struct BiTNode *lchild, *rchild;
- }BiTNode, *BiTree;
-
- //递归查找二叉排序树T中是否存在key
- //指针f指向T的双亲,其初始化调用值为NULL
- //若查找成功,则指针p指向该数据元素节点,并返回TURE
- //否则指针p指向查找路径上访问的最后一个节点并返回FALSE
- bool SearchBST(BiTree T, int key, BiTree f, BiTree *p)
- {
- if(!T)
- {
- *p=f;
- return FALSE;
- }
- else if(key==T->data)
- {
- *p=T;
- return TRUE;
- }
- else if(key<T->data)
- {
- return SearchBST(T->lchild, key, T, p);
- }
- else
- {
- return SearchBST(T->rchild, key, T, p);
- }
- }
-
- //当二叉树排序树T中不存在关键字等于key的数据元素时
- //插入key并返回TRUE, 否则返回FALSE
-
- bool InsertBST(BiTree *T, int key)
- {
- BiTree p,s;
- if(!SearchBST(*T, key, NULL, &p))
- {
- s=(BiTree)malloc(sizeof(BiTNode));
- s->data=key;
- s->lchild=s->rchild=NULL;
- if(!p)
- {
- *T=s;
- }
- else if(key<p->data)
- {
- p->lchild=s;
- }
- else
- {
- p->rchild=s;
- }
- return true;
- }
- else
- {
- return false;
- }
- }
-
-
- bool Delete(BiTree *p)
- {
- BiTree q,s;
- if( (*p)->rchild==NULL )
- {
- q=*p; *p=(*p)->lchild; free(q);
- }
- else if( (*p)->lchild==NULL )
- {
- q=*p; *p=(*p)->rchild; free(q);
- }
- else
- {
- q=*p; s=(*p)->lchild;
- while(s->rchild)
- {
- q=s; s=s->rchild;
- }
- (*p)->data=s->data;
- if(q!=*p)
- q->rchild=s->lchild;
- else
- q->lchild=s->rchild;
- }
- return true;
- }
-
-
- bool DeleteBST(BiTree *T, int key)
- {
- if(!*T)
- {
- return false;
- }
- else
- {
- if(key==(*T)->data)
- {
- return Delete(T);
- }
- else if (key<(*T)->data)
- {
- return DeleteBST(&(*T)->lchild, key);
- }
- else
- {
- return DeleteBST(&(*T)->rchild, key);
- }
- }
- }
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29012686/viewspace-1140292/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29012686/viewspace-1140292/