📄 t_search.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 + -