算法通关村第八关白银挑战——轻松搞定最大深度问题

大家好,我是怒码少年小码。

接着上一期讲讲递归在二叉树题目中的使用。

求二叉树的最大深度

LeetCode 104:给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

观察这个二叉树,可以得到,结点5的最大深度应该是它左右子树的最大深度 + 1(把自己也算进去)的最大值。那么5的左右子树的最大深度等于啥?

等于4的左右结点的最大深度+1和8的左右结点的最大深度+1的最大值。

看到这我们就能判断出本题可以用递归来做了,那么根据递归三步走,我们现在就要来讨论递归的终止条件了。我们根节点一直往下遍历,知道走到叶子结点了才返回,所以root == nullptr就是终止结点。

int maxDapth(TreeNode* root) {
	if (root == nullptr) {
		return 0;
	}
	return max(maxDapth(root->left), maxDapth(root->right)) + 1;
}

因为递归的终止条件是要在下一次调用的时候判断的,所以我们不能使用root->left == nullptr && root->right == nullptr作为终止条件。例如:如题干所给的例子,遍历到结点2时,如果使用root->left == nullptr && root->right == nullptr,那么结点7进入函数就会被返回0,但是结点2也算在最大深度中的,也需要+1,但是直接返回0了。

如果我们把条件改成root == nullptr就不一样了,遍历到结点2时,结点2本身不为空,继续递归+1,在下一次递归中root更新了成为了空,直接返回0退出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值