337. 打家劫舍 III
var rob = function(root) {
if(!root) return 0
const dfs = (node) => {
if(!node) return [0,0]
let left = dfs(node.left)
let right = dfs(node.right)
let dp0 = Math.max(...left) + Math.max(...right)
let dp1 = node.val + left[0] + right[0]
return [dp0, dp1]
}
return Math.max(...dfs(root, [0, 0]))
};
538. 把二叉搜索树转换为累加树
var convertBST = function(root) {
if(!root) return root
let pre = 0
const dfs = (node) => {
if(!node) return node
dfs(node.right)
pre+=node.val
node.val = pre
dfs(node.left)
}
dfs(root)
return root
};
124. 二叉树中的最大路径和
var maxPathSum = function(root) {
let res = -Infinity
const dfs = (node) => {
if(!node) return 0
let left = Math.max(0, dfs(node.left));
let right = Math.max(0, dfs(node.right));
res = Math.max(res, node.val + left + right)
return node.val + Math.max(left , right)
}
dfs(root)
return res
};
437. 路径总和 III
var pathSum = function(root, targetSum) {
let map = new Map()
map.set(0, 1)
let count = 0
const dfs = (node, preSum) => {
if(!node) return
preSum = node.val + preSum
let target = preSum - targetSum
if(map.has(target)) {
count += map.get(target)
}
map.set(preSum, (map.get(preSum) || 0) + 1)
dfs(node.left, preSum)
dfs(node.right, preSum)
map.set(preSum, map.get(preSum) -1)
}
dfs(root, 0)
return count
};
相关笔记