如何编写一个计算某个结点在二叉树中深度的函数

YUSHUIHE 2016-01-08 10:16:16
我在网上搜索到的计算某个结点在二叉树中深度的函数:
template<typename T>
int get_node_layer(stnode<T> *node,T value,int L)
{
int i=-1;
if(node)
{
if(node->nodeValue ==value)
return L;
if(i = get_node_layer(node->left,value ,L+1)!=-1) //查左子树,如找到就返回
return i;
if(i = get_node_layer(node->right,value ,L+1)!=-1)//查右子树,如找到就返回
return i;
}
return i;
}
这个函数其运算结果不正确,怎么回事?又该如何修改?请老师指点。谢谢。
...全文
543 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-01-11
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
YUSHUIHE 2016-01-11
  • 打赏
  • 举报
回复
赵4老师,您的专业水平实在是让我佩服,能和你交个朋友吗?我的QQ号是345929445,我期待着!
YUSHUIHE 2016-01-11
  • 打赏
  • 举报
回复
谢谢赵4老师的回复,您说得非常好,受益非浅。我的每个帖子,您都予以回复,真是太感谢了。
金科苦行僧 2016-01-10
  • 打赏
  • 举报
回复
递归与非递归 两种方法 加一个父指针非常容易 int Deepth_Recursion(int deepth, BiNode* node){ if (node == NULL) return deepth; else Deepth_Recursion(++deepth, node->parent); } int Deepth_NonRecursion(BiNode* node){ int deepth = 0; while (node != NULL){ ++deepth; node = node->parent; } return deepth; }
金科苦行僧 2016-01-10
  • 打赏
  • 举报
回复
楼主是应该会二叉树节点的寻找的 你可以设置一个值来记录
金科苦行僧 2016-01-10
  • 打赏
  • 举报
回复
因为函数是错误的
YUSHUIHE 2016-01-10
  • 打赏
  • 举报
回复
谢谢金科苦行僧老师的连续回复,能说具体些吗?如何返回所记录的值。因我对递归的过程还不太理解。 若二叉树的结点类只有左右结点的指针,而没有父结点指针,又该如何编写代码?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧