二叉查找树

来源:互联网 发布:会锁机的软件下载 编辑:程序博客网 时间:2024/05/01 21:18
//二叉查找树的一些功能#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;}
还少一个删除的过程没加上,传递过程中需要传递父节点,子节点,比较麻烦,我想项有没有更加好的方法,后面的平衡二叉树一并写好~~~
原创粉丝点击