二分搜索树2 插入元素

插入元素过程

1.插入节点不存在

比较插入的元素和当前节点的大小,如果比当前节点大,则比较元素和节点的右孩子,否则比较左孩子。循环,直到找到一个节点为空,将值插入进去

例:60和根元素做比较,60比41大,所以肯定要插入到右侧

60跟58做比较,比58大,说明要插入到58的右侧,58没有右孩子,所以60插入进去

2.如果插入的元素在树中已经存在了,则是找到那个节点,更改对应的value值

实现

#include <iostream>
using namespace std;

template <typename Key,typename Value>
//定义一棵二分搜索树 
class BST{
private: 
	//树的一个节点定义 
	struct Node{
		Key key;
		Value value;
		Node* left;//左孩子 
		Node* right;//右孩子 
		Node(Key key, Value value) //构造函数 
		{
			this->key=key;
			this->value=value;
			this->right=this->left=NULL;
		} 
		Node(Node* node) //构造函数 
		{
			this->key=node->key;
			this->value=node->value;
			this->right=node->right;
			this->left=node->left;
		} 
	}; 
	Node* root;//树的根节点
	int count;//树的节点数
public:
	BST()
	{
		count=0;
		root=NULL;
	}
	int size()
	{
		return count;
	}	
	bool isEmpty()
	{
		return count==0;
	}
	//向树中插入节点 
	void insert(Key key,Value value)
	{
		root=insert(root,key,value);
	}
private:
	//在以node为根节点的树中插入节点
	//返回插入新节点后二叉树的根 
	Node* insert(Node* node, Key key,Value value)
	{
		if(node==NULL) //找到了为空节点的位置 
		{
			count++;
			return new Node(key,value);	
		}
		if(node->key==key)
			node->value = value;//如果插入的key已经存在于树上,更新value的值
		else if(node->key>key) //往左子树插入元素
			node->left = insert(node->left,key,value);
		else//往右子树插入元素
			node->right = insert(node->right,key,value);
		return node; 	
	} 
};

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值