二叉搜索树(二叉排序树,二叉查找树)BST

binary_search_tree

typedef struct btree{
	int data;
	btree *left,*right;
}btree

inorder
preorder
postorder


int inorder(btree* t)
{
	if(t!=null)
	{
		inorder(t->left);
		cout>>t->data;
		inorder(t->right);
	}
}

btree* search(btree* t,int x)
{
	if(t==null||t->data==x)
		return t;
	if(x<t->data)
		return search(t->left,x);
	else
		return search(t->right,x);
}
btree* search(btree* t,int x)
{
	while(t&&t->data!=x)
	{
		if(x<t->data)
			t=t->left;
		else
			t=t->right;	
	}
	return t;
}
btree* getMin(btree* t)
{
	while(t->left){
		t=t->left;
	}
	return t;
}
btree* getMax(btree* t)
{
	while(t->right){
		t=t->right;
	}
	return t;
}
btree* insert(btree* t,int x)
{
	if(t==null)
	{
		t=(btree*)malloc(sizeof(btree));
		t->data=x;
		t->left=t->right=NULL;
	}else if(x<=t->data)
			t->left=insert(t->left,x);
	else if(x>t->data)
			t->right=insert(t->right,x);
	return t;
}

二叉搜索树

建立就是循环n次插入的过程

插入是递归的过程

查找是递归的过程

求前驱或后继的算法:

TREE-SUCCESSOR(x)
if x.right!=NULL
	return TREE-MIN(x.right);// 右孩子不空时,右子树的最小值就是后继
y=x.p
while(y!=NULL&&x==y.right)// 向上找到x的树根,就是其后继
	x=y
	y=y.p
return y;


删除分三种情形:

1,Z没有孩子结点,直接删除

2,Z有一个孩子,将孩子代替Z的位置

3,Z有两个孩子,找到Z的后继Y(右子树中),让Y代替Z的位置,Y的右孩子代替Y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值