剑指 Offer 34. 二叉树中和为某一值的路径

85 阅读1分钟

剑指 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)

在满足条件的位置打上断点

image.png

点击调用栈就可以看到 代码的执行流程啦

image.png