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;
}