二叉搜索树详解——附加C语言代码实现

二叉搜索树:

对于树中的每个节点X,它的左子树中所有项的值都小于X,右子树所有值都大于X,并且没有重复。

一、构造树:

树可以由一个个的节点构成,所以先定义节点结构体,和数据类型变量重命名

typedef int BSTDataType;

typedef struct BSTreeNode
{
	struct BSTreeNode* _left;
	struct BSTreeNode* _right;

	BSTDataType _data;
}BSTreeNode;

 

二、插入节点:

每插入一个节点的时候,与当前节点判断,如果比当前节点大,就往右插入(右边没有节点的情况下),否则往左边插入。如果左右都有子节点,则继续进行比较。

代码:

//插入
int BSTreeInsert(BSTreeNode** tree, BSTDataType x)
{	//注意要传入二级指针,因为tree的跟可能不存在,不存在的话一级指针访问就会出现错误
	BSTreeNode* cur, *parent;
	if (*tree == NULL)	//如果是空树,就创建一个根返回(1表示成功)
	{
		*tree = BuyBSTreeNode(x);
		return 1;
	}

	cur = *tree;//cur指向根节点
	parent = NULL;
	while (cur)	//cur指向当前节点,当前节点不为空时,x如果大于当前值就往右走,小于就往左走
	{
		if (cur->_data >x)
		{
			parent = cur;
			if (cur->_left)
			{
				cur = cur->_left;
			}
			else
			{
				break;
			}
		}
		else if (cur->_data < x)
		{
			parent = cur;
			if (cur->_right)
			{
				cur = cur->_right;
			}
			else
			{
				break;
			}
		}
		else//否则就是存在相同的,无法插入,返回0
		{
			return 0;
		}
	}

	//走到这里,cur已经为空,说明可以插入了,就按定义插入
	if (parent->_data < x)
	{
		parent->_right = BuyBSTreeNode(x);
	}
	else
	{
		parent->_left = BuyBSTreeNode(x);
	}

	return 1;//插入成功
}

//创建节点(辅助插入)
BSTreeNode* BuyBSTreeNode(BSTDataType x){
	BSTreeNode* pbst = (BSTreeNode*)malloc(sizeof(BSTreeNode));
	pbst-
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值