力扣0112——路径总和

文章讨论了如何通过回溯方法在给定二叉树中查找满足条件的路径,其节点值和为目标和。提供了C#代码实现

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

路径总和

难度:简单

题目描述

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false

叶子节点 是指没有子节点的节点。

示例1

输入: root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出: true

示例2

输入: root = [1,2,3], targetSum = 5
输出: false

示例3

输入: root = [], targetSum = 0
输出: false

题解

使用回溯法,因为最终的结果是节点值之和,所以可以使用累减方法进行回溯,当相等的时候可以直接返回true

想法代码

using System;
using System.Collections;
using System.Collections.Generic;

public class TreeNode
{
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null)
    {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

public class Solution
{
    public static void Main(string[] args)
    {
        TreeNode root = new TreeNode
        {
            val = 5,
            left = new TreeNode
            {
                val = 4,
                left = new TreeNode
                {
                    val = 11,
                    left = new TreeNode
                    {
                        val = 7
                    },
                    right = new TreeNode
                    {
                        val = 2
                    }
                }
            },
            right = new TreeNode
            {
                val = 8,
                left = new TreeNode(13),
                right = new TreeNode
                {
                    val = 4,
                    right = new TreeNode(1)
                }
            }
        };
        Solution solution = new Solution();
        bool ans = solution.HasPathSum(root, 22);
        Console.WriteLine(ans);
    }


    public bool HasPathSum(TreeNode root, int targetSum)
    {
        if (root == null)
        {
            return false;
        }

        if (root.left == null && root.right == null)
        {
            return targetSum == root.val;
        }
        return HasPathSum(root.left,targetSum - root.val) || HasPathSum(root.right,targetSum - root.val);
        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值