二叉搜索树的查找操作(C++实现)

代码逻辑:

1、声明树节点结构体
2、创建一颗二叉搜索树,建立树节点之间的关系:左子树的值小于根节点,右子树的值大于根节点
3、实现二叉搜索树的查找操作:从根节点开始,比较节点中的值,如果key大于节点data,则继续向左遍历;如果key小于节点data,则继续向右遍历;如果相等,直接输出当前节点的位置。使用非递归遍历,执行效率更高。
4、程序中使用智能指针,自动管理内存的释放。
5、读者可自己修改创建二叉树节点之间的关系,以比较不同的二叉搜索树的查找结果。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
#include <memory>
using namespace std;

// 二叉树的节点
struct BinaryTree
{
	char data1;
	int data2;
	std::shared_ptr<BinaryTree> left;
	std::shared_ptr<BinaryTree>  right;
	BinaryTree(char val1, int val2) :data1(val1), data2(val2)
	{
		this->left = NULL;
		this->right = NULL;
	}
};

// 二叉搜索树的查找操作
shared_ptr<BinaryTree> BinarySearchFind(int key, shared_ptr<BinaryTree> bt)
{
	shared_ptr<BinaryTree> loc = bt;
	while (loc)
	{
		if (key > loc->data2)
			loc = loc->right;
		else if (key < loc->data2)
			loc = loc->left;
		else
			return loc;
	}
	return NULL;
}

int main()
{
	// 创建一系列树节点:使用智能指针
	shared_ptr<BinaryTree> a = make_shared<BinaryTree>('a',1);
	shared_ptr<BinaryTree> b = make_shared<BinaryTree>('b',2);
	shared_ptr<BinaryTree> c = make_shared<BinaryTree>('c',3);
	shared_ptr<BinaryTree> d = make_shared<BinaryTree>('d',4);
	shared_ptr<BinaryTree> e = make_shared<BinaryTree>('e',5);
	shared_ptr<BinaryTree> f = make_shared<BinaryTree>('f', 6);
	shared_ptr<BinaryTree> g = make_shared<BinaryTree>('g',-1);

	// 创建二叉树节点之间的关系
	c->left = b;
	c->right = d;
	b->left = a;
	a->left = g;
	d->right = e;
	e->right = f;

	shared_ptr<BinaryTree> loc = BinarySearchFind(-1, c);
	if (loc)
		cout << loc->data1 << " " << loc->data2 << endl;

	system("pause");
	return 0;
}

执行结果:
二叉搜索树的查找操作

谢谢阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值