(算法整理)二叉查找树的节点插入与节点查找

二叉查找树(Binary Search Tree)是一种特殊的二叉树,它是一种查找结构,一棵二叉查找树是一棵二叉树,且具有以下性质:

(1)若左子树不空:左子树上所有节点值均小于等于该节点的值;

(2)若右子树不空,右子树上所有节点值均大于等于该节点的值;

(3)左右子树也同样是二叉查找树(递归定义);

(4)等于的情况只能出现在二叉查找树的一侧,一般的二叉查找树无重复节点

二叉查找树的数据结构定义与普通二叉树一样:

/*二叉查找树数据结构定义*/
struct TreeNode
{
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode(int x):val(x), left(null), right(null) {}
};

二叉查找树的节点插入

分为递归和非递归(循环)两种方式:

/*
二叉查找树的节点插入(递归)
核心:找到待插入节点的插入位置
将插入节点的val值与当前节点的val值作比较
若insert_node->val<node->val: 若左子树空,直接插入,否则在左子树中继续搜寻;
若insert_node->val>node->val: 若右子树空,直接插入,否则在右子树中继续搜寻。
 */
void BST_insert(TreeNode* node, TreeNode* insert_node) {
	if (insert_node->val < node->val)
	{
		if (!node->left)
		{
			node->left = insert_node;
		} 
		else {
			BST_insert(node->left, insert_node);
		}
	} else {
		if (!node->right)
		{
			node->right = insert_node;
		} else {
			BST_insert(node->right, insert_node);
		}
	}
}
/*
二叉查找树的节点插入(循环)
核心:找到待插入节点的插入位置
 */
void BST_insert(TreeNode* node, TreeNode* insert_node) {
	while(node != insert_node) {
		if (insert_node->val < node->val)
		{
			if (!node->left)
			{
				node->left = insert_node;
			}
			node = node->left;
		} else {
			if (!node->right)
			{
				node->right = insert_node;
			}
			node = node->right;
		}
	}
}

二叉查找树的节点查找

也分为归和非递归(循环)两种方式:

/*
二叉查找树的节点查找(递归)
若当前节点的val==目标value,说明找到了,return true
若当前节点的val<目标value,若当前节点无左子树,直接return false,否则查找左子树;
若当前节点的val>目标value,若当前节点无右子树,直接return false,否则查找右子树;
 */

bool BST_search (TreeNode* node, int value) {
	if (node->val == value)
	{
		return true;
	}
	if (value < node->val)
	{
		if (!node->left)
		{
			return false;
		} else {
			return BST_search(node->left, value);
		}
	} else {
		if (!node->right)
		{
			return false;
		} else {
			return BST_search(node->right, value);
		}
	}
}
/*
二叉查找树的节点查找(循环)
 */
bool BST_search (TreeNode* node, int value) {
	while(node) {
		if (node->val == value)
		{
			return true;
		}
		if (value < node->val)
		{
			node = node->left;
		} else {
			node = node->right;
		}
	}
	return false;
}

    原文作者:查找算法
    原文地址: https://blog.csdn.net/Little_Fire/article/details/80798663
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞