递归求二叉树高度,可以帮我讲讲吗

zhangyue_lala 2017-11-21 10:35:18
int Hight(Node* root)
{
if ( !root )
return 0;
else
return max(Hight(root->left_child),Hight (root->right_child)) + 1
}
...全文
839 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
岳飞再世YUE 2019-08-05
  • 打赏
  • 举报
回复
为什么你们不用初始化 ld 和 rd??
destory27 2017-12-10
  • 打赏
  • 举报
回复


int PostTreeDepth(BiTree root)
{
	int hl,hr,max;
	if(root != NULL)
	{
		hl = PostTreeDepth(root->LChild);//求左子树的深度
		hr = PostTreeDepth(root->RChild);//求右子树的深度
		max = hl>hr?hl:hr;//得到左右子树深度较大者
		return(max+1);//返回树的深度
	}
	else
	{
		return 0;//空树返回0
	}
}
赵4老师 2017-11-28
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
zhangyue_lala 2017-11-28
  • 打赏
  • 举报
回复
好的,谢谢你
x_xx_xxx_xxxx 2017-11-24
  • 打赏
  • 举报
回复
哈哈哈哈,楼主,如果觉得可以,采纳一次 哈!!
x_xx_xxx_xxxx 2017-11-24
  • 打赏
  • 举报
回复

int Hight(Node* root)
    {
        if ( !root )
            return 0;
        else
            return max(Hight(root->left_child),Hight (root->right_child)) + 1
    }
我讲一下自己的简单理解。 !root , 也就是指针为空的时候返回 0; 就是说,遇到空节点,返回 0 ; 下一行: return max()+ 1 ; 这个是关键点,返回每一个子节点的高度, 括号内,是调用自身这个函数(返回节点树高度) 整个函数的思想可以看做是分治:即把大问题分解成小问题,对于整体函数,不需要知道每一步的执行过程,只需要知道上一步的结果就可以。 每个函数调用自身,判断出是否需要继续调用函数,还是直接返回最根部的值 0 。如果调用函数,即需要获取调用函数的返回值即可。 如果想理解这个函数,提供一个逆向的思维方式,从叶子结点开始思考,也就是 !root 那一行,返回了 0 ,调用他的函数 作对比,取最高值(深度最深值),依次递增到根节点或所输最外层节点,最终返回最大深度。 实现性原理: 每次递归调用一次函数时,计算机都会新开辟出一段函数空间、存储空间,为当前新调用的函数提供存在的空间。 以这个函数的运行为例,系统最终会开辟一个类似树形连接的区域,然后再依次确定每个函数的返回值(从叶子结点开始)。 所以,递归,也是一种 典型的 用空间换时间 的算法。
CT8100 2017-11-24
  • 打赏
  • 举报
回复
MAX(a,b) 分成MAX(a1,a2) MAX(b1,b2) 依次递归,每一子树都取最大值,慢慢到了父接点,就会得到最大值,这个值就是高度。
Schordinger 2017-11-24
  • 打赏
  • 举报
回复
理解递归的时候不能一直往深处考虑,那样不适合人类的思维,只需要思考最后该退出时要返回什么,一般的情况下该返回什么,写代码时明确了这两个即可
赵4老师 2017-11-22
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
时光若止-Dale 2017-11-22
  • 打赏
  • 举报
回复
这个要对递归有一定的理解
das白 2017-11-21
  • 打赏
  • 举报
回复
自己在纸上画一颗二叉树 按照这个函数的意思执行一下 不难理解

65,187

社区成员

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

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