您的位置:首页 > 理论基础 > 数据结构算法

二叉查找树

2013-12-30 21:14 155 查看
题目:二叉查找树结构为: 

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;
}
通过这次的编程题是我受益匪浅,让我能更深入的理解指针操作和指针变量的赋值,比如你想改变某一指针变量最好是通过其地址进行操作,必要时还要用到二级指针,因为单纯变量的改变是局部的,而地址中的变量的改变是全局的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息