Exemple #1
0
void  CreateBST(BSTree  *bst)
/*从键盘输入元素的值,创建相应的二叉排序树*/
{ 
	KeyType key;
	*bst=NULL;
	scanf("%d", &key);
	while (key!=ENDKEY)   /*ENDKEY为自定义常量*/
	{
		InsertBST(bst, key);
		scanf("%d", &key);
	}
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}
Exemple #4
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);
}
Exemple #5
0
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);
		}
	}
}