class Node {
constructor(value, left, right) {
this.value = value;
this.left = left;
this.right = right;
}
}
let n1 = new Node(1, null, null);
let n2 = new Node(2, null, null);
let n4 = new Node(4, n1, n2);
let n6 = new Node(6, null, null);
let root = new Node(5, n4, n6);
function fn(node) {
let 左子树累计值 = 0
if (node.left) {
if (node.left.left == null && node.left.right == null) {
左子树累计值 = node.left.value
} else {
左子树累计值 = fn(node.left)
}
}
let 右子树累计值 = 0
if (node.right && (node.right.left || node.right.right)) {
右子树累计值 = fn(node.right)
}
return 左子树累计值 + 右子树累计值
}
console.log('递归求和:' + fn(root))
function fn2(root) {
let result = 0
let queue = []
queue.push(root)
while (queue.length) {
let node = queue.shift()
if (node.left) {
if (node.left.left == null && node.left.right == null) {
result += node.left.value
} else {
queue.push(node.left)
}
}
node.right && queue.push(node.right)
}
return result
}
console.log('层序遍历求和:' + fn2(root))
console