大家好今天给大家分享下一道 LeetCode 中等难度 的题目104. 二叉树的最大深度
题目
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
分析
1.遍历左边的深度
2.遍历右边的深度
3.返回一个最大值
解法
1.递归
2.迭代
解法一:递归
思路
1.递归求左边的深度
2.递归求右边的深度
3.终止条件root为null时候返回深度0
4.每层递归返回left和右边深度的最大值
*/
var maxDepth = function (root) {
if (!root) return 0;
const left = maxDepth(root.left)+1;
const right = maxDepth(root.right)+1;
return Math.max(left, right);
};
/* 复杂度
时间 O(n)
空间 O(n)
*/
解法二:迭代
思路
1.使用stack 来记录每层的root 和 深度h
2.使用Math.max 来更新最大值
3.返回max
*/
var maxDepth = function (root) {
if (!root) return 0;
const stack = [];
let max = 0;
// 使用stack 来记录 root 和深度h
stack.push({ root, h: 1 });
while (stack.length) {
const { root, h } = stack.pop();
// 更新深度最大值
max = Math.max(max, h);
// 左右子节点入栈
root.right && stack.push({ root: root.right, h: h + 1 });
root.left && stack.push({ root: root.left, h: h + 1 });
}
return max ;
};
/* 复杂度
时间 O(n)
空间 O(n)
*/
总结
今天这道题是主要是练习递归的使用求最大深度 和 如何使用stack模拟递归求最大深度
大家可以看看我分享的一个专栏(前端搞算法)里面有更多关于算法的题目的分享,希望能够帮到大家,我会尽量保持每天晚上更新,如果喜欢的麻烦帮我点个赞,十分感谢
大家如果对“TS”感兴趣的可以看看我的专栏 (TypeScript常用知识),感谢大家的支持
文章内容目的在于学习讨论与分享学习算法过程中的心得体会,文中部分素材来源网络,如有侵权,请联系删除,邮箱 182450609@qq.com