⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t_search.java

📁 已经编写好的数据结构课本程序可以减轻您的负担
💻 JAVA
字号:
/* =============== Program Description =============== */
/* 程序名称: t_search.c                               */
/* 程序目的: 设计二叉查找树的程序。                   */
/* Written By Kuo-Yu Huang. (WANT Studio.)             */
/* =================================================== */
#include <stdlib.h>
#define Max	10
int	Data[Max] = {  15,  2, 13,  6,  17,
		       25, 37,  7,  3,  18};/* 数据数组 */
int Counter;	/* 计数器 */
struct Tree			/* 声明树状结构 */
{
	int		Key;	/* 数据变量 */
	struct	Tree	*Left;  /* 左子树指针 */
	struct	Tree	*Right; /* 右子树指针 */
};
typedef struct Tree TreeNode;
typedef TreeNode *BTree;

BTree   Root = NULL;			/* 根部父节点 */

/* --------------------------------------------------- */
/* 建立二叉查找树                                      */
/* --------------------------------------------------- */
void Create_Tree(int *Data)
{
	BTree   New;		/* 新指针变量 */
	BTree	Current;	/* 目前指针 */
	BTree	Father;		/* 父节点指针 */
	int	  	i;

	for ( i=0;i<Max;i++ )
	{
		New = (BTree) malloc(sizeof(TreeNode));	/* 存储空间配置 */
		New->Key = Data[i];	/* 新指针为输入的数据 */
		New->Left = NULL;	/* 左子树节点 */
		New->Right = NULL;	/* 右子树节点 */
		if ( Root == NULL )	/* 当根节点未连结任何子树时 */
			Root = New;	/* 根节点为新节点 */
		else
		{
			Current = Root;	/* 目前的位置在根节点 */
			while ( Current != NULL ) /* 当目前的节点为最底端则结束循环 */
			{
				Father = Current;	/* 记录父节点 */
				if ( Current->Key >= Data[i] ) 	/* 目前节点数据大于或等于输入数据 */
					Current = Current->Left; 	/* 往左子树 */
				else				/* 目前节点数据小于输入数据 */
					Current = Current->Right;	/* 往右子树 */
			}
			if ( Father->Key > Data[i] )	/* 串起父与子节点 */
				Father->Left = New;
			else
				Father->Right = New;
		}
	}
}

/* --------------------------------------------------- */
/* 二叉查找树                                          */
/* --------------------------------------------------- */
int Tree_Search(int Key)
{
	BTree	Pointer;

	Pointer = Root;		/* 查找节点为根节点 */
	Counter = 0;
	while ( Pointer != NULL )
	{
		Counter++;
				/* 查找节点的数据小于欲查找数据 */
		if ( Pointer->Key < Key )	
			Pointer = Pointer->Right;	/* 往右子树 */
				/* 查找节点的数据大于欲查找数据 */
		else if ( Pointer->Key > Key )
			Pointer = Pointer->Left;	/* 往左子树 */
				/* 查找节点的数据等于欲查找数据 */
		else if ( Pointer->Key == Key )
			return 1;			/* 找到数据 */
	}
	return 0;	/* 未能查找到数据 */
}

/* --------------------------------------------------- */
/* 主程序                                              */
/* --------------------------------------------------- */
void main ()
{
	int		KeyValue;	/* 欲查找数据变量 */
	int i;


	printf("Input Data : ");	/* 输出输入数据 */
	for ( i=0;i<Max;i++ )
		printf("[%d]",Data[i]);
	printf("\n");

	Root = NULL;
	Create_Tree(Data);		/* 调用建立二叉查找树 */

	while ( KeyValue != -1 )	/* 输入-1结束程序 */
	{
	printf("Please enter your key value : ");
	scanf("%d",&KeyValue);

	if ( Tree_Search(KeyValue) )
		printf("Search Time = %d\n",Counter);	/* 输出查找次数 */
	else
		printf("No Found!!\n");	/* 输出没有找到数据 */
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -