tanlingyun的专栏

在打击中成长,在追求中飞跃

原创 二叉排序树生成查找收藏

#include <stdio.h>
#include 
<stdlib.h>

typedef 
struct snode
{
    
int data;
    
struct snode *left, *right;
}
BTree;

void insert(BTree *&s, int x)
{
    
if(s == NULL)
    
{
        s 
= (BTree *)malloc(sizeof(BTree));
        s
->data = x;
        s
->left = NULL;
        s
->right = NULL;
    }

    
else if(s->data == x)
        
return;
    
else if(x < s->data)
        insert(s
->left, x);
    
else
        insert(s
->right, x);
}


BTree 
*creat()
{
    BTree 
*= NULL;
    
while(1)
    
{
        
int x;
        scanf(
"%d"&x);
        
if(x == 0)
            
break;
        
else
            insert(t, x);
    }

    
return t;
}


void preorder(BTree *p)
{
    
if(p != NULL)
    
{
        printf(
"%3d", p->data);
        preorder(p
->left);
        preorder(p
->right);
    }

}


BTree 
*search_num(BTree *t, int x)
{
    
if(t == NULL)
        
return NULL;
    
else
    
{
        
if(t->data == x)
            
return t;
        
else if(x < t->data)
            search_num(t
->left, x);
        
else
            search_num(t
->right, x);
    }

}


int main()
{
    BTree 
*tree;
    printf(
"请输入创建一个排序二叉树的数,以0结束 ");
    tree 
= creat();
    printf(
"先序遍历如下 ");
    preorder(tree);
    printf(
" ");
    printf(
"请输入要查找的数: ");
    
int num;
    scanf(
"%d"&num);
    BTree 
*test = search_num(tree, num);
    
if(test)
        printf(
"找到 ");
    
else
        printf(
"没找到 ");
    
return 0;
}
 

发表于 @ 2007年04月25日 12:20:00|评论(loading...)

新一篇: 堆排序 | 旧一篇: 二叉树的创建、遍历、深度、叶子节点个数

Csdn Blog version 3.1a
Copyright © 未能避开