二叉排序树


#include <iostream>
#include <string.h>
#include <stdio.h>
#include <list>
#include <vector>
#include <stdlib.h>
#include <queue>
using namespace std;

typedef struct node
{
    node *left;
    node *right;
    int data;
}node;

node* insert(node *&tree,int data)
{
    if(tree)
    {
        if(tree->data>data)
            tree->left = insert(tree->left,data);
        else
            tree->right = insert(tree->right,data);
    }
    else
    {
        node *tree = (node *)malloc(sizeof(node));
        tree->data = data;
        tree->left = tree->right = NULL;
        return tree;
    }
    return tree;
}

int ok = 1;

node *root1 = NULL;

void inorder(node *root)
{
    if(root)
    {
        inorder(root->left);
        if(ok == 1&&((!root->left&&!root->right)||(!root->left&&root->right)))
        {
            cout<<root->data;
            ok = 0;
        }
        else
            cout<<" "<<root->data;
        inorder(root->right);
    }
}
node *Del(node *tree,int data)
{
    if(!tree)
    {
        return NULL;
    }
    else
    {
        if(tree->data>data)
        {
            tree->left = Del(tree->left,data);
        }
        else if(tree->data<data)
        {
            tree->right = Del(tree->right,data);
        }
        else
        {
            node *temp = tree;
            if(!tree->left)
            {
                tree = tree->right;
                free(temp);
            }
            else if(!tree->right)
            {
                tree = tree->right;
                free(temp);
            }
            else
            {
                node *p = tree->right;
                while(p&&p->left)
                {
                    p = p->left;
                }
                tree->data = p->data;
                Del(tree->right,p->data);
            }
        }
    }
    return tree;
}

int main()
{
    root1 = NULL;
    string cmd;
    int temp;
    while(true)
    {
        cin>>cmd;
        ok = 1;
        if(cmd=="add")
        {
            cin>>temp;
            root1 = insert(root1,temp);
        }
        else if(cmd=="del")
        {
            cin>>temp;
            root1 = Del(root1,temp);
        }
        inorder(root1);
        cout<<endl;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值