您的位置:首页 > 其它

二叉树的递归创建,以及二叉查找树查找的建立 和遍历查找的比较

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 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐