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

本文深入探讨了二叉查找树的递归创建及查找特性,并与普通遍历查找进行了比较,提供了完整的代码实现,展示了二叉查找树在查找效率上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

(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 ; 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值