鱼C论坛

 找回密码
 立即注册
查看: 2739|回复: 9

[已解决]二叉搜索树人递归问题

[复制链接]
发表于 2018-10-15 02:18:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问二叉搜索树递归算法return返回的最终结果是什么?怎么找到所要找的关键字后一层一层地return回去,到最后回到了根
最佳答案
2018-10-16 13:08:10
cheyhu 发表于 2018-10-16 01:41
一般行参上写 p  和 *p这样的表示的意思怎么区分?有时候还有**p  、&p?

没有 C 的基础?
BTNode BTree;
BTNode *p;
                   原型                                                  |                   调用
int fun(BTNode x);  // 接收结构体变量,返回整型     | fun(BTree);
int fun(BTNode *x); //接收结构体指针                     | fun(&BTree);  fun(p);
int fun(BTNode **x); //接收指向结构体指针的指针   | fun(&p);  <--------------v
int fun(BTNode *&x); //引用结构体指针的指针         | fun(p);    <--------  功能一样

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-15 10:29:54 | 显示全部楼层
看你是哪一种遍历方法。如果找到,返回关键字的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-15 23:24:33 | 显示全部楼层
claws0n 发表于 2018-10-15 10:29
看你是哪一种遍历方法。如果找到,返回关键字的值

就是这种查找方法,递归的最里层找到关键字后出来,一层一层到第一层,那返回的是啥?如果是直接跳出递归那就是返回关键字的所在层,但是这个不是啊
图片1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-15 23:39:27 | 显示全部楼层
cheyhu 发表于 2018-10-15 23:24
就是这种查找方法,递归的最里层找到关键字后出来,一层一层到第一层,那返回的是啥?如果是直接跳出递归 ...

嗯,层序遍历~ 应该很好理解
p 当前节点不为空,进入循环
进行 key 的比较
如果一样,返回当前节点
比较小,找左孩子
比较大,找右孩子
如果找不到,最后会跳出循环,返回空

这个不是递归,是循环/迭代~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-16 00:15:36 | 显示全部楼层
claws0n 发表于 2018-10-15 23:39
嗯,层序遍历~ 应该很好理解
p 当前节点不为空,进入循环
进行 key 的比较

抱歉抱歉,我传错了那个是插入的代码,这张才是查找的代码。。。。
图片2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-16 00:22:35 | 显示全部楼层
cheyhu 发表于 2018-10-16 00:15
抱歉抱歉,我传错了那个是插入的代码,这张才是查找的代码。。。。

这次是递归,但思路一样~
如果找到, return p;
找不到 return NULL;  //上面是 if(p == NULL) 已经到空了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-16 00:58:30 | 显示全部楼层
claws0n 发表于 2018-10-16 00:22
这次是递归,但思路一样~
如果找到, return p;
找不到 return NULL;  //上面是 if(p == NULL) 已经到 ...

嗯  想通了,对了那个指针引用型是什么东西看不太懂
如  BTNODE *&p   //这是一个函数的形参
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-16 01:01:04 | 显示全部楼层
cheyhu 发表于 2018-10-16 00:58
嗯  想通了,对了那个指针引用型是什么东西看不太懂
如  BTNODE *&p   //这是一个函数的形参

C 的话是要二级指针,调用时取地址
C++ 引用型就省去了取地址的动作,在函数的内部也不需要一直解引用

swap(int &x, int &y) ---> swap(a,b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-16 01:41:35 | 显示全部楼层
claws0n 发表于 2018-10-16 01:01
C 的话是要二级指针,调用时取地址
C++ 引用型就省去了取地址的动作,在函数的内部也不需要一直解引用
...

一般行参上写 p  和 *p这样的表示的意思怎么区分?有时候还有**p  、&p?
图片3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-16 13:08:10 | 显示全部楼层    本楼为最佳答案   
cheyhu 发表于 2018-10-16 01:41
一般行参上写 p  和 *p这样的表示的意思怎么区分?有时候还有**p  、&p?

没有 C 的基础?
BTNode BTree;
BTNode *p;
                   原型                                                  |                   调用
int fun(BTNode x);  // 接收结构体变量,返回整型     | fun(BTree);
int fun(BTNode *x); //接收结构体指针                     | fun(&BTree);  fun(p);
int fun(BTNode **x); //接收指向结构体指针的指针   | fun(&p);  <--------------v
int fun(BTNode *&x); //引用结构体指针的指针         | fun(p);    <--------  功能一样

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表