83、美团算法题---二叉树根节点到叶子节点和为指定值的路径

这篇博客介绍了如何在二叉树中找到从根节点到叶子节点且节点值之和等于指定值的路径。给出了两种情况:一是返回所有这样的路径,二是判断是否存在这样的路径。提供的解决方案分别使用了深度优先搜索(DFS)策略,当找到目标路径时进行回溯,并通过递归检查左右子节点来完成任务。
摘要由CSDN通过智能技术生成

一、二叉树根节点到叶子节点和为指定值的路径

(1)题目

给定一个节点数为 n 的二叉树和一个值 sum ,请找出所有的根节点到叶子节点的节点值之和等于的路径,如果没有则返回空。

例如:
给出如下的二叉树,sum = 22 ,

 

 

(2)思路

图片说明

(3)实现

/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */

/**
  * 
  * @param root TreeNode类 
  * @param sum int整型 
  * @return int整型二维数组
  */
function pathSum( root ,  sum ) {
    let res=[],path=[];
    if(!root) return res;
    
    // 先序遍历
    let dfs = function(root,sum,path){
        if(!root) return;
        path.push(root.val);
        
        if(!root.left && !root.right && sum==root.val){
            res.push([...path]);
            path.pop(); //回溯
            return;
        }
        root.left && dfs(root.left,sum-root.val,path);
        root.right && dfs(root.right,sum-root.val,path);
        path.pop(); //回溯
    }
    
    dfs(root,sum,[]);
    return res;
}
module.exports = {
    pathSum : pathSum
};

 

二、二叉树中是否存在节点和为指定值的路径

(1)题目

给定一个二叉树和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径,
例如:
给出如下的二叉树,\ sum=22 sum=22,
 

 

 

 

(2)实现

function hasPathSum( root ,  sum ) {
    if(!root) return false
    if(!root.left && !root.right && sum==root.val){
        return true;
    }
    return hasPathSum(root.left,sum-root.val) || hasPathSum(root.right,sum-root.val);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值