二叉树的递归创建,以及二叉查找树查找的建立 和遍历查找的比较
2014-04-21 17:23
393 查看
二叉树的递归创建 、以及二叉查找树查找的建立 和遍历查找的比较
(1)二叉树的递归创建和二叉树的数组表示法非常相似,可参考二叉树的数组创建
(2)二叉查找树的特性
1)每一个结点的值都不相同,也就是说整棵树中的每一个结点都拥有不同的值。
2)每一个结点的数据大于左子树结点,但是小于右子树结点。
3)左、右两部分的子树,也是一颗二叉查找树。
和遍历查找相比,遍历查找需要查找左右两颗子树,而二叉查找树只需要查找左右子树的某个子树都可以。
下面是二叉查找树的实现过程,为了便于比较,顺便也附上了遍历查找的代码。
#include<stdio.h>
#include<stdlib.h>
struct tree
{
int data;
struct tree *left;
struct tree *right;
};
typedef struct tree treenode;
typedef treenode *btree;
btree creatbtree( int *data,int pos )
{
btree newnode;
if(data[pos] == 0|| pos > 15 )
return NULL;
else
{
newnode = (btree)malloc(sizeof(treenode));
newnode->data = data[pos];
newnode->left = creatbtree(data,2*pos);
newnode->right = creatbtree(data,2*pos+1);
return newnode;
}
}
btree btreefind(btree ptr,int value)
{
while( ptr != NULL )
{
if( ptr->data == value )
{
return ptr;
}
else
if ( ptr->data > value)
ptr = ptr->left;
else
ptr = ptr->right;
}
}
btree btreesearch(btree ptr,int value)
{
btree ptr1,ptr2;
if( ptr != NULL )
{
if ( ptr->data == value)
return ptr ;
else
ptr1 = btreesearch(ptr->left,value);
ptr2= btreesearch(ptr->right,value);
if( ptr1 != NULL)
return ptr2;
else
return NULL;
}
else
return NULL;
}
int main()
{
btree root = NULL;
btree ptr = NULL;
int value;
int data[16] ={0,5,4,6,2,0,0,8,1,3,0,0,0,0,7,9};
root = creatbtree(data,1);
printf("请输入寻找结点数据(1 —— 9)\n");
scanf("%d",&value);
ptr = btreefind(root,value);
if( ptr != NULL )
printf("二叉查找树:结点数据是 %d\n",ptr->data);
else
printf("二叉查找树没有找到\n");
ptr = btreesearch(root,value);
if( ptr != NULL )
printf("遍历查找:结点数据是 %d\n",ptr->data);
else
printf("二叉查找树没有找到\n");
return 0 ;
}
(1)二叉树的递归创建和二叉树的数组表示法非常相似,可参考二叉树的数组创建
(2)二叉查找树的特性
1)每一个结点的值都不相同,也就是说整棵树中的每一个结点都拥有不同的值。
2)每一个结点的数据大于左子树结点,但是小于右子树结点。
3)左、右两部分的子树,也是一颗二叉查找树。
和遍历查找相比,遍历查找需要查找左右两颗子树,而二叉查找树只需要查找左右子树的某个子树都可以。
下面是二叉查找树的实现过程,为了便于比较,顺便也附上了遍历查找的代码。
#include<stdio.h>
#include<stdlib.h>
struct tree
{
int data;
struct tree *left;
struct tree *right;
};
typedef struct tree treenode;
typedef treenode *btree;
btree creatbtree( int *data,int pos )
{
btree newnode;
if(data[pos] == 0|| pos > 15 )
return NULL;
else
{
newnode = (btree)malloc(sizeof(treenode));
newnode->data = data[pos];
newnode->left = creatbtree(data,2*pos);
newnode->right = creatbtree(data,2*pos+1);
return newnode;
}
}
btree btreefind(btree ptr,int value)
{
while( ptr != NULL )
{
if( ptr->data == value )
{
return ptr;
}
else
if ( ptr->data > value)
ptr = ptr->left;
else
ptr = ptr->right;
}
}
btree btreesearch(btree ptr,int value)
{
btree ptr1,ptr2;
if( ptr != NULL )
{
if ( ptr->data == value)
return ptr ;
else
ptr1 = btreesearch(ptr->left,value);
ptr2= btreesearch(ptr->right,value);
if( ptr1 != NULL)
return ptr2;
else
return NULL;
}
else
return NULL;
}
int main()
{
btree root = NULL;
btree ptr = NULL;
int value;
int data[16] ={0,5,4,6,2,0,0,8,1,3,0,0,0,0,7,9};
root = creatbtree(data,1);
printf("请输入寻找结点数据(1 —— 9)\n");
scanf("%d",&value);
ptr = btreefind(root,value);
if( ptr != NULL )
printf("二叉查找树:结点数据是 %d\n",ptr->data);
else
printf("二叉查找树没有找到\n");
ptr = btreesearch(root,value);
if( ptr != NULL )
printf("遍历查找:结点数据是 %d\n",ptr->data);
else
printf("二叉查找树没有找到\n");
return 0 ;
}
相关文章推荐
- 数据结构C#实现-二叉查找树的创建,查找,以及各种递归(非递归)遍历算法
- 二叉树建立以及递归、非递归遍历
- 二叉树的建立以及六种递归非递归遍历
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 【基础备忘】二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的创建,遍历,查找,查找父节点,深度,大小等的递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构 —— 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的创建,以及递归前中后序以及层次遍历
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- C++实现二叉树所有操作 -- 创建递归遍历迭代遍历拷贝清空查找
- 二叉树创建以及遍历(递归和非递归方式)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的创建、前序中序后序递归遍历与非递归遍历、层序遍历以及二叉树简单应用的C语言实现
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构 ——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(一)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现