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

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
}
...全文
591 11 1 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
岳飞再世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里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
  • 打赏
  • 举报
回复
这个要对递归有一定的理解
  • 打赏
  • 举报
回复
das白 2017-11-21
自己在纸上画一颗二叉树 按照这个函数的意思执行一下 不难理解
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2017-11-21 10:35
社区公告
暂无公告