记录下生活,没什么特别的,只是最近笔试遇到这个问题。笔试两个代码题:
Q1: 二叉树求和
Q2: Object 遍历 (太简单,不写了)
// 二叉树求和
const root = {
val: 1,
left: {
val: 2,
left: {
val: 3,
},
right: {
val: 4,
left: {
val: 5
}
},
}, right: {
val: 6,
right: {
val: 7
}
}
}
const main = root => {
let sum = getSum(root); // 中序遍历 根左右
let sum2 = getSum2(root); // 先序遍历 左根右
rollbackRoot(root,'added');
let sum3 = getSum3(root); // 后序遍历 左右根
rollbackRoot(root,'added');
console.log(sum, sum2, sum3); // 1+2+...+7 = 28
}
// 中序遍历 根左右
const getSum = (root, sum = 0) => {
if (!root) return sum;
sum += root.val;
sum = getSum(root.left, sum);
sum = getSum(root.right, sum);
return sum;
}
// 先序遍历 左根右
const getSum2 = (root, sum = 0) => {
if (!root) return sum;
sum = getSum2(root.left, sum);
if (!root.added) {
sum += root.val;
root.added = 1;
}
sum = getSum2(root.right, sum);
return sum;
}
// 后序遍历 左右根
const getSum3 = (root, sum = 0) => {
if (!root) return sum;
sum = getSum3(root.left, sum);
sum = getSum3(root.right, sum);
if (!root.added) {
sum += root.val;
root.added = 1;
}
return sum;
}
const rollbackRoot= (root,nodeName) => {
if (!root) return;
root[nodeName] = undefined;
rollbackRoot(root.left, nodeName);
rollbackRoot(root.right, nodeName);
return root;
}
main(root);