数据结构 树【二叉搜索树】

41 篇文章 1 订阅

一、介绍

本质上也是一个递归。

看下图:

我们要将一个序列的值,按照顺序插入二叉树中。

其中:第一个插入的是根节点

之后插入的结点,如果比父结点小,则向左遍历,将其左子树当成下一次遍历的父结点;如果比父结点大,则向右遍历,将其右子树当成下一次遍历的父结点。

直到父结点的某棵子树是空的,而这个结点的下一次遍历正好到该子树的根结点时,进行插入。

二、思路

不断利用递归进行判断。

这里要尤其注意,传参需要传递二级指针!

因为我们传入的树本身是一个指针,我们需要改变这个指针的值(分配空间),所以需要传递该指针的指针才行。

建议朋友们看一看我写的这两篇文章,有举例详解:

指针传参:https://blog.csdn.net/Kukeoo/article/details/114297006

“空”指针:https://blog.csdn.net/Kukeoo/article/details/114297192

 

三、代码

//建立二叉搜索树
void insert(Tree* t, int value)
{
	Node* node = (Node*)malloc(sizeof(Node));
	node->data = value;
	node->left = NULL;
	node->right = NULL;

	if (*t == NULL)
	{
		*t = node;
	}
	else
	{
		//临时结点,永远指向父节点
		Node* temp = *t;
		//开始循环遍历,循环条件为当前结点不为空
		while (temp != NULL)
		{
			//如果进入左子树
			if (value < temp->data)
			{
				if (temp->left == NULL)
				{
					temp->left = node;
					return;
				}
				else
				{
					temp = temp->left;
				}
			}

			//如果进入右子树
			else
			{
				if (temp->right == NULL)
				{
					temp->right = node;
					return;
				}
				else
				{
					temp = temp->right;
				}
			}
		}
	}
}

四、测试

用中序遍历查看:

int main()
{
	Tree t = NULL;
	Tree* tt = &t;
	insert(tt, 5);
	insert(tt, 3);
	insert(tt, 4);
	insert(tt, 8);
	insert(tt, 9);
	insert(tt, 1);
	inOrder(t);
	releaseTree(t);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值