110 平衡二叉树
使用后续遍历,先求出左边高度和右边高度,再看其差值
var isBalanced = function(root) {
let res = true
const dfs = (node) => {
if (!node) {
return 0
}
const left = dfs(node.left)
const right = dfs(node.right)
if (Math.abs(left - right) > 1) {
res = false
}
return 1 + Math.max(left, right)
}
dfs(root)
return res
};
257 二叉树的所有路径
类似回溯
var binaryTreePaths = function(root) {
const res = [], path = []
if (!root) {
return res
}
const dfs = (node) => {
if (!node) {
return
}
if (!node.left && !node.right) {
path.push(node.val)
res.push(path.join("->"))
path.pop()
return
}
path.push(node.val)
dfs(node.left)
dfs(node.right)
path.pop()
}
dfs(root)
return res
};
404 左叶子之和
var sumOfLeftLeaves = function(root) {
let sum = 0
function dfs (node) {
if (!node) {
return
}
// 左叶子的定义
if (node.left && !node.left.left && !node.left.right) {
sum += node.left.val
}
dfs(node.left)
dfs(node.right)
}
dfs(root)
return sum
};