#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 100;
char post[maxn],in[maxn];
typedef struct node
{
int element;
struct node *lchild;
struct node *rchild;
}Node;
void Insert(Node** bst,int item)
{
if(!(*bst))
{
*bst = (Node*)malloc(sizeof(Node));
(*bst)->element = item;
(*bst)->lchild = (*bst)->rchild = NULL;
}
else
{
if(item < (*bst)->element)
Insert(&((*bst)->lchild),item);
else if(item > (*bst)->element)
Insert(&((*bst)->rchild),item);
}
}
void intravel(Node* bst)
{
if(bst)
{
intravel(bst->lchild);
printf("%d ",bst->element);
intravel(bst->rchild);
}
}
Node *findmin(Node *bst)
{
if(!bst) return NULL;
if(!bst->lchild) return bst;
else return findmin(bst->lchild);
}
void Delete(Node** bst,int item)
{
Node* tmp;
if(!(*bst))
printf("要删除的元素没有找到");
else
{
if(item < (*bst)->element)
Delete(&((*bst)->lchild),item);
else if(item > (*bst)->element)
Delete(&((*bst)->rchild),item);
else
{
if((*bst)->lchild && (*bst)->rchild)
{
tmp = findmin((*bst)->rchild);
(*bst)->element = tmp->element;
Delete(&(*bst)->rchild,(*bst)->element);
}
else
{
tmp = *bst;
if(!(*bst)->lchild)
*bst = (*bst)->rchild;
else
*bst = (*bst)->lchild;
free(tmp);
}
}
}
}
int main(int argc, char *argv[])
{
Node* BST = NULL;
int n;
cin >> n;
while(n!=-1)
{
Insert(&BST,n);
cin >> n;
}
intravel(BST);
printf("\n");
Delete(&BST,4);
Delete(&BST,1);
Delete(&BST,9);
intravel(BST);
return 0;
}
二叉搜索树的插入,删除
最新推荐文章于 2024-06-25 16:39:44 发布