二叉查找树
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;
}
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;
}
通过这次的编程题是我受益匪浅,让我能更深入的理解指针操作和指针变量的赋值,比如你想改变某一指针变量最好是通过其地址进行操作,必要时还要用到二级指针,因为单纯变量的改变是局部的,而地址中的变量的改变是全局的。
相关文章推荐
- 查找树ADT——二叉查找树
- 《程序员面试题精选》07.后序遍历结果判断其是否为二叉查找树
- Golang以OO的方式实现二叉查找树
- 二叉查找树的插入与遍历
- 二叉查找树
- 查找二叉查找树的任意给定结点的“下一个”结点
- 二叉查找树
- 符号表-二叉查找树
- 算法导论第12章 二叉查找树中的后继
- 二叉查找树的C语言实现(二)
- AVL树(平衡二叉查找树)
- 二叉查找树的实现(BST)(转载自http://blog.csdn.net/collonn/article/details/18732079)
- 二叉查找树【AVL树】
- 非递归实现二叉查找树
- [算法系列之六]二叉查找树
- 二叉查找树
- 二叉查找树(搜索树)BST各类操作(c++完整实现)
- 用动态规划解决二叉查找树
- 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的比较
- 浅谈算法和数据结构: 二叉查找树