BST 二叉搜索树

#include <stdio.h>
#include <stdlib.h>
#define NUM 16
typedef struct ND {
struct ND * leftchd;
struct ND * rightchd;
struct ND * next;
int data;
} node;

node * BST(node * np);
void   insertnd(node * np,int a);
node * removnode(node * np,int value);
node * minnode(node * np);
int main() {
node * np = NULL;
np = BST(np);
return 0;
}

node * BST(node * np) {
int a = 0;
scanf("%d",&a);
if(a != -1) {
	np = (node *)malloc(sizeof(node));
	np->data = a;
	np->leftchd = NULL;
	np->rightchd = NULL;
	np->next = NULL;
} else printf("error input!s%");

while(a != -1) {
	scanf("%d",&a);
	if(a != -1) {
		insertnd(np,a);
	}
}
return np;
}

void insertnd(node *np, int a) {
if(a < np->data) {
	if(np->leftchd == NULL) {
		np->leftchd = (node *)malloc(sizeof(node));
		np->leftchd->data = a;
		np->leftchd->leftchd = NULL;
		np->leftchd->rightchd = NULL;
		np->leftchd->next = NULL;
	} else insertnd(np->leftchd,a);
} else {
	if(np->rightchd == NULL) {
		np->rightchd = (node *)malloc(sizeof(node));
		np->rightchd->data = a;
		np->rightchd->leftchd = NULL;
		np->rightchd->rightchd = NULL;
		np->rightchd->next = NULL;
	} else insertnd(np->rightchd,a);
}
}

node * removnode(node * np,int value) {
if(np == NULL) {
	return np;
}
if(np->data == value) {
	if(np->leftchd == NULL||np->rightchd == NULL) {
		node * temp = NULL;
		if(np->leftchd == temp)
			temp = np->rightchd;
		else temp = np->leftchd;
		if(temp == NULL)
			np = NULL;
		else np = temp;
	} else {
		node * temp = NULL;
		temp =  minnode(np->rightchd);
		np->data = temp->data;
		np->rightchd = removnode(np->rightchd,temp->data);
	}
} else if(value < np->data) {
	np->leftchd = removnode(np->leftchd,value);
} else {
	np->rightchd = removnode(np->rightchd,value);
}
return np;
}
node * minnode(node * np) {
if(np->leftchd != NULL)
	minnode(np->leftchd);
else return np;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值