题目:二叉查找树结构为:
typedef struct BSTree
{
struct BSTree *left, *right;
int item;
} BSTree;
实现以下操作:
1) 创建一个新的 BST 结点。
2) 在 BST 中查找一个指定的元素。
typedef struct BSTree
{
struct BSTree *left, *right;
int item;
} BSTree;
实现以下操作:
1) 创建一个新的 BST 结点。
2) 在 BST 中查找一个指定的元素。
3) 向 BST 中插入元素。
代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct BSTree
{
struct BSTree *left, *right;
int item;
} BSTree, *BSTreePtr;
BSTreePtr insert(BSTreePtr root,int data)
{
BSTreePtr ptr = root;
BSTreePtr tempnode;
BSTreePtr newnode = (BSTreePtr)malloc(sizeof(BSTree));
newnode->item = data;
newnode->left = NULL;
newnode->right = NULL;
if(!ptr)
return newnode;
while (ptr)
{
tempnode = ptr;
if (data <= ptr->item)
ptr = ptr->left;
else
ptr = ptr->right;
}
if (data <= tempnode->item)
tempnode->left = newnode;
else
tempnode->right = newnode;
return root;
}
BSTreePtr creatTree(void)
{
int data;
BSTreePtr root = NULL;
printf("请输入要插入的结点:(以0作为结束)\n");
scanf("%d",&data);
while (data)
{
root = insert(root,data);
scanf("%d",&data);
}
return root;
}
int find(BSTreePtr root,int m)
{
BSTreePtr ptr = root;
if (!ptr)
return 0;
while (ptr)
{
if (m == ptr->item)
return 1;
else if (m < ptr->item)
ptr = ptr->left;
else
ptr = ptr->right;
}
return 0;
}
int main(void)
{
int m,res;
BSTreePtr root = NULL;
root = creatTree();
printf("请输入想查找的元素:\n");
scanf("%d",&m);
res = find(root,m);
if (res)
printf("找到元素%d\n",m);
else
printf("没找到元素%d\n",m);
return 0;
}
通过这次的编程题是我受益匪浅,让我能更深入的理解指针操作和指针变量的赋值,比如你想改变某一指针变量最好是通过其地址进行操作,必要时还要用到二级指针,因为单纯变量的改变是局部的,而地址中的变量的改变是全局的。