二分搜索树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; 	
	} 
};
发布了86 篇原创文章 · 获赞 0 · 访问量 4058

猜你喜欢

转载自blog.csdn.net/qq_31965925/article/details/105695564