剑指offer第24题(c#)

本文详细介绍了如何用C#解决剑指Offer中的第24题,即寻找二叉树中节点值和等于给定整数的所有路径。通过递归的先序遍历策略,结合判断条件,实现了从根节点到叶节点的路径查找。代码中展示了关键的Path方法和FindPath方法,以及如何存储和更新路径。

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

剑指offer第24题(c#)

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

这道题花了我一下午=.=(头秃),还是太菜了,得多练练。首先我的解题思路是要利用递归同时递归条件要把握住这两个点:1.路径节点值的和等于输入的整数。2.从根节点到叶节点才算一条完整的路径。
这里我们就可以从这两点切入,要有两部分的判断总和等于输入值和需要从根节点遍历到叶节点判断递归,简言之就是是否到达叶节点和是否等于输入值来决定这个路径是否加入到二维列表中去;

我们采取先序遍历来把整个树走一遍同时依靠上述的两个判断点来记录可行的路径;
下面展示一些 内联代码片

    public List<List<int>> res1 = new List<List<int>>();
    public List<int> res2 = new List<int>();//两个列表用来存储可行路径
    public List<List<int>> FindPath(TreeNode root, int expectNumber)
    {
        // write code here
        if(root==null)
            return res1;        
        Path(root,expectNumber);
        return res1;        
    }
    public void Path(TreeNode root2,int expectNumber)
    { //将一维列表作为临时路径记录列表,把每一步的值都先加入到res2                  
        res2.Add(root2.val);         
        if(root2.val==expectNumber&&root2.left==null&&root2.right==null)//如果满足上述说的两个判断点即叶节点和最后值相等则将记录下来的这一条临时路径res2加入到最终记录的二维列表res1中
        {
            res1.Add(new List<int>(res2));
        }
        else 
        {
        if(root2.left!=null)//如果还未到达叶节点的话则继续向子节点遍历,同时因为要求取相加相等所以只需要在下一次递归中把输入的和值减去这次遍历中的值即可,进行先序遍历;
            Path(root2.left, expectNumber-root2.val);
        if(root2.right!=null)
            Path(root2.right, expectNumber-root2.val);          
        }
        res2.RemoveAt(res2.Count-1);//这条语句只有在先序遍历走到叶节点才会使用,意思就是不管该叶节点是否对错都要将临时路径返回到上一个节点,去记录其他的路径可能。    
        }        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值