首页IT科技求二叉树中最大和的路径的实验目的(每日算法之二叉树中和为某一值的路径(三))

求二叉树中最大和的路径的实验目的(每日算法之二叉树中和为某一值的路径(三))

时间2025-09-19 13:02:34分类IT科技浏览5394
导读:JZ84 二叉树中和为某一值的路径(三 题目 给定一个二叉树root和一个整数值...

JZ84 二叉树中和为某一值的路径(三)

题目

给定一个二叉树root和一个整数值 sum                ,求该树有多少路径的的节点值之和等于 sum                 。 1.该题路径定义不需要从根节点开始                        ,也不需要在叶子节点结束        ,但是一定是从父亲节点往下到孩子节点 2.总节点数目为n 3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1)

方法 非递归层次遍历

思路

算法实现

既然要找所有路径上节点和等于目标值的路径个数       ,那我们肯定先找这样的路径起点啊                        ,但是我们不知道起点究竟在哪里                , 而且任意节点都有可能是起点       ,那我们就前序遍历二叉树的所有节点                       ,每个节点都可以作为一次起点                ,即子树的根节点                       。 具体做法: step 1:每次将原树中遇到的节点作为子树的根节点送入dfs函数中查找有无路径,如果该节点为空则返回        。 step 2:然后递归遍历这棵树每个节点                       ,每个节点都需要这样操作                。 step 3:在dfs函数中                        ,也是往下递归,遇到一个节点就将sum减去节点值再往下                       。 step 4:剩余的sum等于当前节点值则找到一种情况        。

代码

package mid.JZ84二叉树中和为某一值的路径3; import java.util.*; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class Solution { /** * 代码中的类名                、方法名                       、参数名已经指定               ,请勿修改                        ,直接返回方法规定的值即可 * * @param root TreeNode类 * @param sum int整型 * @return int整型 */ private int res = 0; public int FindPath(TreeNode root, int sum) { // write code here if (root == null) return res; //查询以某结点为根的路径数 dfs(root, sum); //以其子结点为新根 FindPath(root.left, sum); FindPath(root.right, sum); return res; } public void dfs (TreeNode root, int sum) { if (root == null) return; //符合目标        。res++ if (sum == root.val) res++; //子节点继续查找 dfs(root.left, sum - root.val); dfs(root.right, sum - root.val); } }

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
ios主题安卓下载(Android ViewPager2 + TabLayout + BottomNavigationView)