二叉查找树

//二叉查找树的一些功能
#include<iostream>
#include<malloc.h>
#include<stdio.h>
using namespace std;
struct Node
{
    int data;
    struct Node* left;
    struct Node* right;
};
//初始化
void Init(Node* Tree)
{
    Tree->data=-1;        //设置为-1代表根节点没有值
    Tree->left=NULL;
    Tree->right=NULL;
}
//插入数据
void Insert(Node* Tree,int number)
{
    Node* p=Tree;
    if(p->data==-1)
    {
        p->data=number;
        return ;
    }
    Node* q=(Node*)malloc(sizeof(Node));   //新分配的节点
    q->data=number;
    q->left=q->right=NULL;
    while(1)
    {
        if(p->data>number)
        {
          if(p->left==NULL)
          {
              p->left=q;
              return ;
          }
          else
            p=p->left;
        }
        else if(p->data<=number)
        {
            if(p->right==NULL)
            {
                p->right=q;
                return ;
            }
            else
              p=p->right;
        }
    }
}
//输出所有数据
void output(Node* Tree)
{
    Node* p=Tree;


    if(p->data==-1)
    {
      printf("There's no element in this BinarySearchTree.\n");
      return ;
    }


    if(p->left!=NULL)
      output(p->left);
    
    printf("%d ",p->data);
    
    if(p->right!=NULL)
      output(p->right);
}

//查找二叉数里面是否有该数字
bool Search(Node* Tree,int number)
{
    Node *p=Tree;
    if(p->data==number)
      return true;
    else
    {
        if(p->data>number)
        {
            if(p->left==NULL)
              return false;
            else
              Search(p->left,number);
        }
        else 
        {
            if(p->right==NULL)
              return false;
            else
              Search(p->right,number);
        }
    }
}

int main()
{
    freopen("1.txt","r",stdin);
    int N;
    scanf("%d",&N);     //插入几个数字
    Node* Tree;
    Tree=(Node*)malloc(sizeof(Node));
    Init(Tree);
    for(int i=1;i<=N;++i)
    {
        Insert(Tree,i);
    }
    output(Tree);

    printf("\n");
    return 0;
}


还少一个删除的过程没加上,传递过程中需要传递父节点,子节点,比较麻烦,我想项有没有更加好的方法,后面的平衡二叉树一并写好~~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值