标签:
二叉排序树上的删除
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int KeyType;//关键字 5 typedef int DataType;//其他数据域 6 7 struct node 8 { 9 KeyType key;//关键字 10 DataType other;//其他数据域 11 struct node *lchild, *rchild;//左右子树指针 12 }; 13 typedef struct node BSTNode;//结点类型 14 15 BSTNode *Deletebst(BSTNode *T, KeyType x);//查找需要删除的结点 16 BSTNode *Delete(BSTNode *T);//删除结点 17 18 void main() 19 { 20 21 } 22 23 BSTNode *Deletebst(BSTNode *T, KeyType x)//查找需要删除的结点 24 { 25 if (!T)//找不到 26 { 27 return NULL; 28 } 29 else 30 { 31 if (T->key == x) 32 { 33 return Delete(T); 34 } 35 else if (T->key > x) 36 { 37 return Deletebst(T->lchild, x); 38 } 39 else 40 { 41 return Deletebst(T->rchild, x); 42 } 43 } 44 } 45 46 BSTNode *Delete(BSTNode *T)//删除结点 47 { 48 BSTNode *q, *s; 49 50 if (T->rchild == NULL) 51 { 52 q = T; 53 T = T->lchild; 54 free(q); 55 } 56 else if (T->lchild == NULL) 57 { 58 { 59 q = T; 60 T = T->rchild; 61 free(q); 62 } 63 } 64 else 65 { 66 q = T; 67 s = T->lchild; 68 while (s->rchild) 69 { 70 q = s; 71 s = s->rchild; 72 } 73 T->key = s->key; 74 75 if (q != T) 76 { 77 q->rchild = s->lchild; 78 } 79 else 80 { 81 q->lchild = s->lchild; 82 } 83 84 free(s); 85 } 86 87 return T; 88 }
13
标签:
原文地址:http://www.cnblogs.com/denggelin/p/5724371.html