农场里有许多牛,每头牛都有一个产奶量值,范围在0到1000之间。为了方便管理,农场主将牛按照产奶量排列成 二叉树的形式。现在,他想知道他从任意结点出发,一直到叶子结点走出这棵树(中间不回头),每次遇到一头牛就收获他的产量奶,他能收获的最大产奶量总和是多少?
区块链毕设网qklbishe.com为您提供问题的解答
农场里有许多牛,每头牛都有一个产奶量值,范围在0到1000之间。为了方便管理,农场主将牛按照产奶量排列成二叉树的形式。现在,他想知道他从任意结点出发,一直到叶子结点走出这棵树(中间不回头),每次遇到一头牛就收获他的产量奶,他能收获的最大产奶量总和是多少?
非递归算法,使用队列来做,思路清晰简单快捷
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型 */ public int maxMilkSum (TreeNode root) { // write code here if(root==null){ return 0; } if(root.left==null&&root.right==null){ return root.val; } int sum=0; //循环左子节点为空的节点 while(root.left==null){ root=root.right; } //循环右子节点为空的节点 while(root.right==null){ root=root.left; } //开始遍历该节点的左右子节点, sum+=root.val; //左子节点 sum+=getResult(root.left); //右子节点 sum+=getResult(root.right); return sum; } //分别找到该节点叶子节点的最大和 public int getResult(TreeNode root){ Queue<TreeNode> queue=new LinkedList<>(); queue.add(root); int max=0; while(!queue.isEmpty()){ TreeNode node=queue.poll(); if(node.left==null&&node.right==null){ if(node.val>max){ max=node.val; } } if(node.left!=null){ node.left.val=node.left.val+node.val; queue.add(node.left); } if(node.right!=null){ node.right.val=node.right.val+node.val; queue.add(node.right); } } return max; } }
57:01
以上就是关于问题农场里有许多牛,每头牛都有一个产奶量值,范围在0到1000之间。为了方便管理,农场主将牛按照产奶量排列成 二叉树的形式。现在,他想知道他从任意结点出发,一直到叶子结点走出这棵树(中间不回头),每次遇到一头牛就收获他的产量奶,他能收获的最大产奶量总和是多少?的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训