二叉树中和为某一值的路径

二叉树中和为某一值的路径

http://www.nowcoder.com/questionTerminal/b736e784e3e34731af99065031301bca

思路——动态规划(应该算吧?)

要点

  • 辅助函数
  • 假设知道前面节点的路径数组pre
  • 用一个二维数组resArr保存所有路径

判断逻辑

情况1、如果当前节点 == null,或其值 > 期待值

那么就不用继续遍历下去了,return。

情况2、如果当前节点的值 == 期待的值,并且当前节点是叶子节点

那么就找到了一个路径,将当前节点的值加入pre(之前的路径数组),再将pre加入我们的结果resArr中。

情况3、以上情况都不满足

说明还可以继续找下去。就更新参数,对其左右子节点递归。

代码

function FindPath(root, expectNumber)
{
    // write code here
    // 保存路径结果
    var resArr = [];
    // 前序遍历,递归查找
    nextLayer(root, expectNumber, [], resArr);
    // 让数组长度大的靠前。(不做处理好像也通过测试了,不过还是按题意来得好)
    resArr.sort(function(a, b){
        return b.length - a.length;
    });
    return resArr;
}
function nextLayer(node, exp, pre, resArr){
    // 情况1
    if(node==null || node.val > exp){
        return;
    }
    // 注意对过期路径做拷贝,因为左右子节点都需要使用,不能互相影响
    var cur = pre.slice(0);
    cur.push(node.val);
    // 情况2
    if(node.val == exp && node.left==null && node.right==null){
        resArr.push(cur);
        return;
    }
    // 情况3。注意更新参数
    nextLayer(node.left, exp-node.val, cur, resArr);
    nextLayer(node.right, exp-node.val, cur, resArr);
}
全部评论

相关推荐

10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务