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 }
View Code

相关文章: