剑指offer-24-二叉树中和为某一值的序列

题目描述

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

思路:

  1. 前序遍历二叉树,每次更新当前路径的和curtSum;
  2. 判断当前结点是否是叶子结点,以及curtSum是否等于expectNumber。如果是,把当前路径保存在res结果中;
  3. 若不符合条件,则弹出此结点。

二叉树的遍历:

递归前序遍历:

var preOrder = function (node) {
  if (node) {
    console.log(node.value);
    preOrder(node.left);
    preOrder(node.right);
  }
}
本题答案:
function FindPath(root, expectNumber) {
    var result = [];
    if (root === null) {
        return result;
    }
    dfsFind(root, expectNumber, [], 0, result);
    return result;
}
function dfsFind(root, expectNumber, path, currentSum, result) {
    currentSum += root.val;
 
    path.push(root.val);
 
    if (currentSum == expectNumber && root.left == null && root.right == null) {
        result.push(path.slice(0));
    }
    if (root.left != null) {//如果没有这个判断条件,会报错:val属性不存在;
        dfsFind(root.left, expectNumber, path, currentSum, result);
    }
 
    if (root.right != null) {
        dfsFind(root.right, expectNumber, path, currentSum, result);
    }
 
    path.pop();//注意:在JS中数组是动态增长和删除的,所以要出栈。
}
var root = {
  val: 10,
  left: {
    val: 5,
    left: {
      val: 4
    },right:{val:7}
  },
  right: {
    val: 12,
  }
};  
FindPath(root,22);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值