問題の意味
従業員の優れた-部下の関係に代わって複数のツリーは、子ノードは、親ノードの直接の部下です。ノードは、プロパティ値と幸せな子ノードのリストを含む、従業員を表します。
我々はそれがすべての直接の部下が行くことができなかったのです行くために従業員を頼む、パーティーに出席し、当事者が持つことができる最大幸福値への参加を求めてどのくらいです。
問題の解決策
- 私は1人の従業員が行くか、最上層には行かないし、それは二つの状態から転送されていませんが、またそこに行くことはできませんいくつかのレベルの従業員に注意を払うことを考えていたので、それはノードによるとなります。
- 押して、状態ノードを参照するために、ルートノードを指すと最大値は、すべての子どもたちへのノードから転送されてどんなに幸せ議論していない、再帰は、リーフノードの良い初期化から得られます。
- そして、見返りにクラスオブジェクトに2つの値を返さないためにノード自身が、あなたも離れて2種類の機能を書き込むことができます
- アイデアは、コードがよりよく書かれている、より重要です。
コード
package Tree;
import java.util.ArrayList;
class Employee{
int happyVal;
ArrayList<Employee> list=new ArrayList<>();
public Employee(int happyVal,ArrayList<Employee> list) {
this.happyVal=happyVal;
this.list=list;
}
}
class HappyReturnType{
int withoutRoot;
int withRoot;
public HappyReturnType(int withoutRoot,int withRoot) {
this.withoutRoot=withoutRoot;
this.withRoot=withRoot;
}
}
public class Main {
public static void main(String args[]) {
//test
Employee e1=new Employee(100,null);//level3
ArrayList<Employee> e2ChildList=new ArrayList<Employee>();
e2ChildList.add(e1);
Employee e2=new Employee(500,e2ChildList);//level2
Employee e3=new Employee(400,null);//level2
ArrayList<Employee> e4ChildList=new ArrayList<Employee>();
e4ChildList.add(e2);
e4ChildList.add(e3);
Employee e4=new Employee(200,e4ChildList);//level1
//compute
HappyReturnType r=maxHappyVal(e4);
int maxHappyVal=Math.max(r.withoutRoot, r.withRoot);
System.out.println(maxHappyVal);
}
public static HappyReturnType maxHappyVal(Employee node) {
int withoutRoot=0;
int withRoot=node.happyVal;
if(node.list==null) {
return new HappyReturnType(0,node.happyVal);
}
for(Employee childNode:node.list) {
HappyReturnType r=maxHappyVal(childNode);
int happyVal=Math.max(r.withoutRoot,r.withRoot);
withoutRoot+=happyVal;
withRoot+=r.withoutRoot;
}
return new HappyReturnType(withoutRoot,withRoot);
}
}