題目:
實現函數接受任意二叉樹,求二叉樹所有根到葉子路徑組成的數字之和。
解決辦法:使用遞歸方法層層遍歷相加
// 1
// 2 3
// 4 5 6 7
//結果:(1+2)+(1+3)+(2+4)+(2+5)+(3+6)+(3+7) // 39
// 實現函數接受任意二叉樹,求二叉樹所有根到葉子路徑組成的數字之和。
class TreeNode {
value: number
left?: TreeNode
right?: TreeNode
}
function getPathSum(root) {
// your code
}
// 例子,一層二叉樹如下定義,路徑包括 1 -> 2, 1 -> 3
const node = new TreeNode();
node.value = 1;
node.left = new TreeNode();
node.left.value = 2;
node.right = new TreeNode();
node.right.value = 3;
getPathSum(node) // return 7 =(1+2)+(1+3)
解答:
class TreeNode {}
const node = new TreeNode();
node.value = 1;
node.left = new TreeNode();
node.left.value = 2;
node.right = new TreeNode();
node.right.value = 3;
// 下面數據便於測試使用 結果:39
node.left.left = new TreeNode();
node.left.left.value = 4
node.left.right = new TreeNode();
node.left.right.value = 5
node.right.left = new TreeNode();
node.right.left.value = 6
node.right.right = new TreeNode();
node.right.right.value = 7
function getPathSum(node) {
let num = 0;
function addNum(node) {
if(node.left) {
num += (node.value + node.left.value)
if(node.left.left) {
addNum(node.left)
} else if(node.left.right) {
addNum(node.left)
}
}
if(node.right) {
num += (node.value + node.right.value)
if(node.right.left) {
addNum(node.right)
} else if(node.right.right) {
addNum(node.right)
}
}
}
addNum(node)
console.log(num) // 39
}
getPathSum(node)