15:28:36 2019-08-29
学习 因为开学有考试还要收作业 之后一个星期没有太多时间来学了
PTA 函数题3 补充二叉树 的查找 插入 删除 操作
1 Position Find(BinTree BST, ElementType X) 2 { 3 if (!BST) 4 return NULL; 5 if (X < BST->Data) 6 Find(BST->Left, X); 7 else if (X > BST->Data) 8 Find(BST->Right, X); 9 else 10 return BST; 11 } 12 Position FindMin(BinTree BST) 13 { 14 if (!BST) 15 return NULL; 16 while (BST->Left) 17 BST = BST->Left; 18 return BST; 19 } 20 Position FindMax(BinTree BST) 21 { 22 if (!BST) 23 return NULL; 24 while (BST->Right) 25 BST = BST->Right; 26 return BST; 27 } 28 29 BinTree Delete(BinTree BST, ElementType X) 30 { 31 if (!BST) 32 { 33 printf("Not Found\n"); 34 return NULL; 35 } 36 else if (X < BST->Data) 37 BST->Left = Delete(BST->Left, X); 38 else if (BST->Data < X) 39 BST->Right = Delete(BST->Right, X); 40 else 41 if (BST->Left != NULL && BST->Right != NULL) 42 { 43 BinTree T = FindMin(BST->Right); 44 BST->Data = T->Data; 45 BST->Right = Delete(BST->Right, BST->Data); 46 } 47 else 48 if (!BST->Left) 49 BST = BST->Right; 50 else if (!BST->Right) 51 BST = BST->Left; 52 return BST; 53 } 54 BinTree Insert(BinTree BST, ElementType X) 55 { 56 if (!BST) 57 { 58 BST = (BinTree)malloc(sizeof(struct TNode)); 59 BST->Data = X; 60 BST->Left = BST->Right = NULL; 61 } 62 else if (X < BST->Data) 63 BST->Left = Insert(BST->Left, X); 64 else if (BST->Data < X) 65 BST->Right = Insert(BST->Right, X); 66 return BST; 67 }