求二叉树的高度

思路

利用二叉树的结构特点和递归思路,先求出左树高度和右树高度,较高的子树 + 1(根节点也占了一个高度单位)就是本树的高度。

代码

代码1,严重的计算重复问题

cpp 复制代码
int TreeHeight(BTNode* root)
{
	if (root == NULL)
		return 0;

	return TreeHeight(root->left) > TreeHeight(root->right)
		? TreeHeight(root->left) + 1 : TreeHeight(root->right) + 1;
}

比较时计算了一遍,返回时又计算了一遍,更可怕的是每颗子树都有这样的问题,虽然代码简单,但重复问题非常严重。

代码2,记录结果,避免重复计算

cpp 复制代码
int TreeHeight(BTNode* root)
{
	if (root == NULL)
		return 0;

	int leftHeight = TreeHeight(root->left);
	int rightHeight = TreeHeight(root->right);

	return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}

比较时计算了一遍,这时把结果记录到变量里,返回时直接使用变量返回,没有重复计算。

代码3,fmax函数

cpp 复制代码
int TreeHeight(BTNode* root)
{
	if (root == NULL)
		return 0;

	return fmax(TreeHeight(root->left), TreeHeight(root->right)) + 1;
}

实参完成计算过程,传递给形参,形参直接用作返回,计算过程不重复。

相关推荐
小范的技术工坊2 分钟前
大模型蒸馏
人工智能·算法·数据挖掘·大模型
Benny_Tang7 分钟前
P9527 [JOIST 2022] 洒水器 / Sprinkler 题解
c++·算法
kiracrimson31 分钟前
希尔排序:让插入排序不再怕逆序
数据结构·算法·排序算法
yi0111 小时前
DAY17: LeetCode 139|单词拆分:从“把单词删掉”到用 DP 记录合法切口
人工智能·笔记·python·算法·leetcode·动态规划
陈希瑞1 小时前
LongCat-2.5-Preview 的web逆向能力实测
人工智能·算法·wasm
tangguofeng3 小时前
基于分治策略的循环赛日程表问题的思路讲解
算法
起个名字费劲死了3 小时前
VisionMaster集成深度学习算法(基础狗)
人工智能·深度学习·算法
lengxuenong3 小时前
枚举例题分析
c++·算法·青少年编程
Navigator_Z4 小时前
LeetCode //C - 1269. Number of Ways to Stay in the Same Place After Some Steps
c语言·算法·leetcode
2601_965742224 小时前
短视频脚本创作方法分享:本地生活类账号的起步思路
大数据·人工智能·算法·ai·新媒体运营·生活