关于二分搜索树插入操作的返回值问题

来源:5-4 二分搜索树的查找

怀瑜

2017-11-27

Node* insert(Node* root, Key key,Value value) { if (!root) {//root==NULL时,直接插入 count++; return new Node(key, value); } if (key == root->key){ root->value = value; return root;//返回根节点 } else if (key > root->value) root->right = insert(root->right, key, value); else root->left = insert(root->left, key, value); //return root;//返回根节点 }                                                                     请问老师在这里我将返回根节点的语句放在了if(key==root->key)后面,是否正确?我想的最后的return语句也是在执行到key==root->key才能执行到,放在这个地方和老师您的那个地方区别应该只在于是在上一步return还是在下一步return,请问老师这种想法对吗?

写回答

1回答

liuyubobobo

2017-11-27

你的这个函数有的时候有返回值,有的时候没有返回值。在调用:

root->right = insert(root->right, key, value);

或者

root->left = insert(root->left, key, value);

接到一个空值。


这个逻辑和我的代码逻辑不等价:)在我的代码逻辑下,这个函数永远有返回值。请注意这个递归函数的语意:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/05-Binary-Search-Tree/Course%20Code%20(C%2B%2B)/03-Binary-Search-Tree-Insert/main.cpp


// 向以node为根的二分搜索树中, 插入节点(key, value), 使用递归算法    
// 返回插入新节点后的二分搜索树的根    
Node* insert(Node *node, Key key, Value value)

 

可以尝试自己测试一下这个函数,向树中添加10个值,再用树的遍历的形式打印出来看看:)


另:劳烦下一次贴代码请使用慕课网的代码语言block形式编辑代码。


0
1
怀瑜
非常感谢!
2021-05-31
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程