【学习打卡】第14天 数据结构之“树”
标签:
JavaScript
课程名称:JavaScript版数据结构与算法
课程章节:第8章 数据结构之“树”
主讲老师:lewis
课程内容:
今天学习的内容包括:
8-7 LeetCode:102. 二叉树的层序遍历——通过广度优先遍历,记录同一层级节点并返回。
8-8 LeetCode:94. 二叉树的中序遍历——中序遍历为左根右,把对应遍历记录返回。
8-9 LeetCode:112. 路径总和——通过深度度优先遍历计算每条路径值的和是否满足targetSum。
课程收获:
二叉树的层序遍历
1、基于广度优先遍历实现二叉树的层序遍历
2、本题使用了三种解法
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
if(!root) return []
// -------------------1------------------
// let res = []
// let btf = (p,l) => {
// if(res[l]){
// res[l].push(p.val)
// }else{
// res.push([p.val])
// }
// if(p.left) btf(p.left,l+1)
// if(p.right) btf(p.right,l+1)
// }
// btf(root,0)
// -------------------1------------------
// -------------------2------------------
// let res = []
// let p = [[root,0]]
// while(p.length){
// let [n,l] = p.shift()
// if(res[l]){
// res[l].push(n.val)
// }else{
// res.push([n.val])
// }
// if(n.left) p.push([n.left,l+1])
// if(n.right) p.push([n.right,l+1])
// }
// -------------------2------------------
// -------------------3------------------
let res = []
let p = [root]
while(p.length){
let len = p.length
res.push([])
while(len--) {
let n = p.shift()
res[res.length - 1].push(n.val)
if(n.left) p.push(n.left)
if(n.right) p.push(n.right)
}
}
// -------------------3------------------
return res
};
二叉树的中序遍历
1、中序遍历的特点为左中右遍历模式
2、将遍历以数据返回
3、本题使用两种解题方法
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function(root) {
// let res = []
// const rec = (n) => {
// if(!n) return
// rec(n.left)
// res.push(n.val)
// rec(n.right)
// }
// rec(root)
let res = []
let stack = []
let p = root
while(stack.length || p){
while(p){
stack.push(p)
p = p.left
}
const n = stack.pop()
res.push(n.val)
p = n.right
}
return res
};
路径总和
1、通过深度度优先遍历计算每条路径值的和是否满足targetSum
2、如果满足返回true否则返回false
3、本题采用两种解题方法
/**
* @param {TreeNode} root
* @param {number} targetSum
* @return {boolean}
*/
var hasPathSum = function(root, targetSum) {
if(!root) return false
// let stack = [[root, 0]]
// while(stack.length){
// let [p,l] = stack.shift()
// if(!p.left && !p.right && l+p.val === targetSum) return true
// if(p.left) stack.push([p.left, l+p.val])
// if(p.right) stack.push([p.right, l+p.val])
// }
// return false
let res = false
const dfs = (p,l) => {
if(!p.left && !p.right && l+p.val === targetSum) res = true
if(p.left) dfs(p.left, l+p.val)
if(p.right) dfs(p.right, l+p.val)
}
dfs(root, 0)
return res
};
今天学习的这三道算法题,都是先自己思考然后尝试着写,自己也写出来了一点东西,再结合老师所讲的内容,感觉收获还是很大的,感觉自己还是能够学得会,写得出,能思考,能解决问题的,对自己说一句,加油😀~
坚持打卡,坚持学习!明天见💪~
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦