1 Position Find(BinTree BST, ElementType X) { 2 if (!BST) return NULL;//查找失败 3 if (X > BST->Data) return Find(X, BST->Right);//在右子树中继续 4 else if (X < BST->Data) return Find(X, BST->Left); 5 else return BST;//查找成功,则返回当前结点的地址 6 } 7 8 BinTree Insert(BinTree BST, ElementType X) { 9 if (!BST) {//若原树为空,则生成并返回一个结点的二叉搜索树 10 BST = malloc(sizeof(struct TNode)); 11 BST->Data = X; 12 BST->Left = BST->Right = NULL; 13 } 14 else { 15 if (X < BST->Data) BST->Left = Insert(X, BST->Left); 16 else if (X > BST->Data) BST->Right = Insert(X, BST->Right); 17 } 18 return BST; 19 } 20 21 BinTree Delete(BinTree BST, ElementType X) { 22 Position t; 23 24 if (!BST) printf("Not Found\n"); 25 else if (X < BST->Data) BST->Left = Delete(X, BST->Left); 26 else if (X > BST->Data) BST->Right = Delete(X, BST->Right); 27 else { 28 if (BST->Left && BST->Right) {//找的的结点若有左右两个子结点 29 t = FindMin(BST->Right);//在右子树中找到最小的元素填充删除结点 30 BST->Data = T->Data; 31 BST->Right = Delete(BST->Data, BST->Right);//在删除结点的右子树中删除最小元素 32 } 33 else { 34 t = BST;//找到的结点有一个或者没有子结点 35 if (!BST->Left) BST = BST->Right; 36 else if (!BST->Right) BST = BST->Left; 37 free(t); 38 } 39 } 40 return BST; 41 } 42 43 Position FindMin(BinTree BST) { 44 if (!BST) return NULL; 45 else if (!BST->Left) return BST; 46 else return FindMin(BST->Left); 47 } 48 49 Position FindMax(BinTree BST) { 50 if (BST) 51 while (BST->Right) BST = BST->Right; 52 53 return BST; 54 }
函数Insert将X插入二叉搜索树BST并返回结果树的根结点指针;
函数Delete将X从二叉搜索树BST中删除,并返回结果树的根结点指针;如果X不在树中,则打印一行Not Found并返回原树的根结点指针;
函数Find在二叉搜索树BST中找到X,返回该结点的指针;如果找不到则返回空指针;
函数FindMin返回二叉搜索树BST中最小元结点的指针;
函数FindMax返回二叉搜索树BST中最大元结点的指针。