当前位置: 代码迷 >> 综合 >> 第三章 二叉树问题(派对的最大快乐值)
  详细解决方案

第三章 二叉树问题(派对的最大快乐值)

热度:49   发布时间:2023-10-11 12:04:56.0

【题目】

        员工信息的定义如下:

public static class Employee {public int happy;// 这名员工可以带来的欢乐值public List<Employee> employeeList;// 这名员工有哪些直接下级public Employee(int happy, List<Employee> employeeList) {this.happy = happy;this.employeeList = employeeList;}
}

公司的每个员工都符合Employee类的描述。整个公司人员结构可以看作是一颗标准的,没有环的多叉树。树的头节点是公司的唯一的老板,除老板外,每个员工都有唯一的直接上级。叶节点是没有任何下属的基层员工,除基层员工外,每个员工都有一个或多个直接下级
,这个公司现在要办party,你可以决定那些员工来,哪些员工不来,但是要遵循如下规则:
1、如果某个员工来了,那么这个员工的所有直接下级都不能来
2、派对的整体快乐值是所有到场员工快乐值的累加
3、你的目标是让派对的整体快乐值最大
给定一个头节点boss,请返回派对的最大快乐值
要求:如果以boss为头节点的整棵树有N个节点,请做到时间复杂度为O(N)

public static ReturnType getPartyMaxHappy(Employee employee) {if (employee == null) {return new ReturnType(0, 0);}int yesMax = employee.happy;int noMax = 0;for (Employee employee1 : employee.employeeList) {ReturnType temp = getPartyMaxHappy(employee1);yesMax += temp.noMax;noMax+= Math.max(temp.yesMax,temp.noMax);}return new ReturnType(yesMax, noMax);}public static class ReturnType {public int yesMax;public int noMax;public ReturnType(int yesMax, int noMax) {this.yesMax = yesMax;this.noMax = noMax;}}

  相关解决方案