1. 二叉树是否存在一条路径使得路径上的数字之和为targetSum(二叉树以数组的形式给出:访问左右节点使用 i*2+1 和 2*i+2即可)
// arr结构的树中是否存在一条路径使得这条路上数之和为preSum
let preOrder = (arr, i, targetsum, curSum) => {
if (i >= arr.length) {
return false
}
curSum += arr[i]
if (arr[2 * i + 1] == null && arr[2 * i + 2] == null) {
return curSum === targetsum
}
return preOrder(arr, i * 2 + 1, targetsum, curSum) || preOrder(arr, i * 2 + 2, targetsum, curSum)
}
let arr = [5, 4, 8, 11, null, 13, 4, 7, 2, null, null, null, 1]
console.log(preOrder(arr, 0, 22, 0));
2.按照逆时针,从外带里打印矩阵
// 从外到里打印矩阵matrix
var displayMatrix = (matrix) => {
// 设置上下左右边界
let top = 0
let bottom = matrix.length - 1
let left = 0
let right = matrix[0].length - 1
let res = []
while (true) {
// 从左到右这个方向
for (let i = left; i <= right; i++) {
res.push(matrix[top][i])
}
top++;
if (top > bottom) {
break
}
// 从上到下
for (let i = top; i <= bottom; i++) {
res.push(matrix[i][right])
}
right--
if (right < left) {
break
}
// 从右到左
for (let i = right; i >= left; i--) {
res.push(matrix[bottom][i])
}
bottom--
if (bottom < top) {
break
}
// 从下到上
for (let i = bottom; i >= top; i--) {
res.push(matrix[i][left])
}
left++
if (left > right) {
break
}
}
// res数组保存了输出的顺序
}