void CreateBST(BSTree *bst) /*从键盘输入元素的值,创建相应的二叉排序树*/ { KeyType key; *bst=NULL; scanf("%d", &key); while (key!=ENDKEY) /*ENDKEY为自定义常量*/ { InsertBST(bst, key); scanf("%d", &key); } }
BSTree CreateBST(void) { BSTree T; KeyType Key; T=NULL; printf("请输入一个关键字(输入0时结束输入):\n"); scanf("%d",&Key); while (Key) { InsertBST(&T,Key); printf("请输入下一个关键字(输入0时结束输入):\n"); scanf("\n%d",&Key); } return T; }
int main(void) { int i; int a[10]={62,88,58,47,35,73,51,99,37,93}; BiTree T=NULL; for(i=0;i<10;i++) { InsertBST(&T, a[i]); } DeleteBST(&T,93); DeleteBST(&T,47); printf("本样例建议断点跟踪查看二叉排序树结构"); return 0; }
int main() { int a[] = {16, 53, 54, 75, 80, 99, 100, 110, 160, 161, 162}; int i, res, need = 17; BitTree T = NULL, p; for(i = 0; i < sizeof(a)/sizeof(a[0]); i++) { InsertBST(&T, a[i]); } res = SearchBST(T, need, NULL, &p); if(FALSE == res) fprintf(stderr, "Not found %d\n", need); else fprintf(stdout, "Has found %d\n", need); }
int main() { int num[1000] = {15, 55, 6, 7, 25, 2, 1, 66, 94, 64}; int n = 10; BST T = NULL; InitBST(T); T->key = num[0]; int k = 1; for (; k < n; k++) { Node* node = NULL; InitBST(node); node->key = num[k]; InsertBST(T, node); } while (1) { printf("现有的数字为:"); PrintNum(num, n); printf("请选择:\n"); printf("1.添加节点并重新构造排序树\n2.删除节点\n3.先序遍历\n4.中序遍历\n5.后序遍历\n6.搜索结点\n"); int select; scanf("%d", &select); switch (select) { case 1: { printf("请添加key:"); int addNum; scanf("%d", &addNum); int i; int flag = 0; for (i = 0; i < n; i++) { if (num[i] == addNum) { printf("在数组中已存在该数字\n"); flag = -1; break; } } if (flag == -1) { continue; } num[n] = addNum; n++; DestroyBST(T); InitBST(T); T->key = num[0]; i = 1; for (; i < n; i++) { Node* node = NULL; InitBST(node); node->key = num[i]; InsertBST(T, node); } break; } case 2: { printf("请输入key:"); int delNum; scanf("%d", &delNum); int i; int index; int flag = 0; for (i = 0; i < n; i++) { if (num[i] == delNum) { flag = 1; index = i; break; } } if (flag == 0) { printf("数组中没有这个key\n"); continue; } DeleteBST(T, delNum); for (i = index; i < n - 1; i++) { num[i] = num[i + 1]; } n--; break; } case 3: PreOrderTraverseBST(T, Visit); printf("\n"); break; case 4: InOrderTraverseBST(T, Visit); printf("\n"); break; case 5: PostOrderTraverseBST(T, Visit); printf("\n"); break; case 6: int searchKey; printf("请输入key值:"); scanf("%d", &searchKey); Node* node = SearchBST(T, searchKey); if (node != NULL) { printf("搜索成功!节点key值%d\n", node->key); } default: break; fflush(stdin); } } }