BInary Tree sorting

本文提供了一套完整的二叉树操作实现,包括插入、查找、删除等关键功能,并附带了遍历展示的方法。通过这些代码,读者可以深入了解二叉树的数据结构及基本算法。

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

[code]
binarytree.c
#include<stdio.h>
#include<stdlib.h>
#include "binarytree.h"

//1 declare success ,0 declare fail
int bs_search(Tree *base , int key,Tree **p)
{
    if(base==NULL)
    {
        *p=NULL;
        return 0;
    }
    else
    {
        Tree *temp,*parent;
        temp=base;
        while(temp!=NULL)
        {
            if(temp->data==key)
            {
                *p=temp;
                return 1;
            }
            else if(temp->data<key)
            {
                parent=temp;
                temp=temp->right;
            }
            else
            {
                parent=temp;
                temp=temp->left;
            }
        }
        *p=parent;
        return 0;
    }
}

void insert(Tree **base,int key)
{
    Tree **p;
    Tree *temp;
    p=(Tree **)malloc(sizeof(Tree));
    if(bs_search(*base,key,p)==0)
    {
        Tree *s=(Tree *)malloc(sizeof(Tree));
        s->right=s->left=NULL;
        s->data=key;
        s->visited=0;
        if(*p==NULL)
        {
            *base=s;
        }
        else if(key>(*p)->data)
        {
            temp=*p;
            temp->right=s;
        }
        else
        {
            temp=*p;
            temp->left=s;
        }
    }
    free(p);
}

void travel(Tree *base)
{
    if(base==NULL)
        return;
    else if(base->visited==0)
    {
        base->visited=1;
        travel(base->left);
        printf(" %d ",base->data);
        travel(base->right);
    }
}

int delete_bst(Tree **base , int key)
{
    if(*base==NULL)
        return 0;
    else if(key==(*base)->data)
        return delete(base);
    else if(key>(*base)->data)
        return delete(&((*base)->right));
    else
        return delete(&((*base)->left));
}

int delete(Tree **p)
{
    Tree *q;
    if((*p)->right==NULL)
    {
        q=*p;
        *p=(*p)->left;
        free(q);
    }
    else if((*p)->left==NULL)
    {
        q=*p;
        *p=(*p)->right;
        free(q);
    }
    else
    {
        Tree *s;
        q=*p;
        s=(*p)->left;
        while(s->right!=NULL)
        {
            q=s;
            s=s->right;
        }
        (*p)->data=s->data;
        if(q!=*p)
            q->right=s->left;
        else
            q->left=s->left;
        free(s);
    }
    return 1;
}

void initial(Tree **base)
{
    if(*base==NULL)
        return;
    (*base)->visited=0;
    initial(&((*base)->left));
    initial(&((*base)->right));
}

binarytree.h
struct tree
{
    int data;
    int visited;      //0 visited ,1 unvisited
    struct tree *left,*right;
};
typedef struct tree Tree;

int bs_search(Tree *base , int key,Tree **p);
void insert(Tree **base, int key);
int delete_bst(Tree **base ,int key);

int delete(Tree **p);
void travel(Tree *base);  //inorder
void initial(Tree **base);
[/code]
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值