「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」
大家好今天给大家分享下一道 LeetCode 困难度 的题目515. 在每个树行中找最大值
题目
给定一棵二叉树的根节点
root
,请找出该二叉树中每一层的最大值。
分析
1.二叉树
2.找出每层中的最大值
3.返回一个每层最大值的数组
解法
1.DFS
2.BFS
解法一:DFS
思路
1.先递归进行二叉树的每个点的访问
2.在每层递归中记录节点的高度h,如果res[h]有值则和当前的root.val最比较留下最大值
3.在下一次递归中节点高度h+1
*/
var largestValues = function (root) {
if (!root) return [];
const res = [];
function recur(root, h) {
if (!root) {
return;
}
if (res[h] !== undefined) {
res[h] = Math.max(root.val, res[h]);
} else {
res[h] = root.val;
}
recur(root.left, h + 1);
recur(root.right, h + 1);
}
recur(root, 0);
return res;
};
/* 复杂度
时间 O(n)
空间 O(n)
*/
解法二:BFS
思路
1.使用queue队列来存储树的节点
2.在存储的节点中加入高度h
3.在每次迭代中 记录节点的高度h,如果res[h]有值则和当前的root.val最比较留下最大值
4.只有在节点存在的情况下才存入queue
*/
var largestValues = function (root) {
if (!root) return [];
const res = [];
const queue = [];
queue.push({ root, h: 0 });
while (queue.length) {
const { root, h } = queue.shift();
if (res[h] !== undefined) {
res[h] = Math.max(root.val, res[h]);
} else {
res[h] = root.val;
}
root.left && queue.push({ root: root.left, h: h + 1 });
root.right && queue.push({ root: root.right, h: h + 1 });
}
return res;
};
/* 复杂度
时间 O(n)
空间 O(n)
*/
总结
今天这道题是主要是练习使用DFS和BFS来求解tree状结构类型的题目
大家可以看看我分享的一个专栏(前端搞算法)里面有更多关于算法的题目的分享,希望能够帮到大家,我会尽量保持每天晚上更新,如果喜欢的麻烦帮我点个赞,十分感谢
大家如果对“TS”感兴趣的可以看看我的专栏 (TypeScript常用知识),感谢大家的支持
文章内容目的在于学习讨论与分享学习算法过程中的心得体会,文中部分素材来源网络,如有侵权,请联系删除,邮箱 182450609@qq.com
\