剑指 Offer 34. 二叉树中和为某一值的路径
- 用一个栈记录走过的路径
- 每访问一个节点,将节点值入栈,并记录当前的sum总数
- 若到达了叶子节点,并且记录的sum满足条件,将栈中的节点推入答案
- 若存在子节点,继续遍历子节点
- 向上回溯,路径栈弹出顶部元素
代码实现如下
const pathSum = (root, targetSum) => {
if(!root) return []
const res = [];
const stack = [];
backTrack(root, targetSum, 0);
return res;
function backTrack(node, targetSum, sum) {
stack.push(node.val);
sum += node.val;
if (!node.left && !node.right && sum === targetSum) {
res.push([...stack]);
}
node.left && backTrack(node.left, targetSum, sum);
node.right && backTrack(node.right, targetSum, sum);
stack.pop();
};
};
想要调试代码过程 需要加上调用函数 和 参数 去理解
var obj = {
val:5,
left:{
val:4,
left:{
val:11,
left:{
val:7,
left:null,
right:null
},
right:{
val:2,
left:null,
right:null
}
},
right:null
},
right:{
val:8,
left:{
val:13,
left:null,
right:null
},
right:{
val:4,
left:{
val:5,
left:null,
right:null
},
right:{
val:1,
left:null,
right:null
}
}
}
}
pathSum(obj,22)
在满足条件的位置打上断点
点击调用栈就可以看到 代码的执行流程啦