BST的插入迭代写法(c++/算法第四版的习题)

BST的插入迭代写法(c++/算法第四版的习题)

算法第四版后习题,实现BST插入的写法

要求实现:
插入(key-value)的节点
若有这个节点,则修改其value;
若没有,则在合适的位置插入;

想了一下,其实就是 改写BST的查找

合适的位置是什么意思?

我们先想想BST的查找方法是怎么实现的,在以root为根的节点不断与key比较,自上向下遍历找这个key对应的节点。
而BST的插入基本上就是BST的查找方法,只是略有改动。

BST查找一个不存在的key,会自动遍历到一个 空位置(即我们的待插入位置),我们希望停在这个空位置的双亲结点上。以便我们插入这个(key-value),
查找空位置的双亲节点就是**“合适的位置”**

查找与插入时指针的遍历顺序

在这里插入图片描述

find: b
	temp:s-e-a-左侧空(虚线位置)
find: y
	temp:s-x-右侧空(虚线位置)
	
而插入时停在空的双亲节点
insert: b
	temp:s-e-a
insert: y
	temp:s-x

思路理清了开始写代码

		void put_iter(char k,int v){put_iter(root,k,v);}
		
		bool put_iter(BSTNode*root,char key,int value)
		{
			BSTNode*temp=root;
			while(temp!=NULL)
			{
				if(key==temp->key){temp->value=value;return 1;}
				else if (key>temp->key)
						if(temp->right)temp=temp->right;
							else break;//这里可以用一个b1记录这部操作
				else{
					if(temp->left)temp=temp->left;
					else break;//这里可以用一个b2记录这部操作 
				}
			}
			  
			if(temp==NULL)temp=new BSTNode(key,value,1);		
				if(key>temp->key)temp->right=new BSTNode(key,value,1);
					else temp->left=new BSTNode(key,value,1);
			return 1;
		}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值