任何想法如何開始構建一個三葉草樹?這棵樹傳遞了一個employeeID和一個managerID。節點之間的鏈接意味着一種關係 - 樹中較高的節點是較低節點的管理者。但是,我們希望樹上的操作有效,例如搜索應該是O(lg n)。有任何想法嗎?這甚至有可能嗎?實現一棵葉子樹
編輯:
我在幫助真正有需要的。我可以問爲什麼這個問題正在關閉?
任何想法如何開始構建一個三葉草樹?這棵樹傳遞了一個employeeID和一個managerID。節點之間的鏈接意味着一種關係 - 樹中較高的節點是較低節點的管理者。但是,我們希望樹上的操作有效,例如搜索應該是O(lg n)。有任何想法嗎?這甚至有可能嗎?實現一棵葉子樹
編輯:
我在幫助真正有需要的。我可以問爲什麼這個問題正在關閉?
您創建一個包含2個屬性的對象:
完蛋了
如果你總是從「大老闆」開始做一個自上而下的搜索,你甚至可以意識到它與經理的關係
謝謝!但是如果我們爲這位經理添加經理呢? – OckhamsRazor
沒問題:你將「中層經理」的經理屬性設置爲「高級經理」,並將「中層經理」添加到「高級經理」 – fixagon
的員工集合中。但那麼我們如何通過ID進行搜索?我們無法進行O(lg n)搜索。我們只能做一個BFS或DFS。 – OckhamsRazor
好吧,對於任何樹,我覺得你應該把節點看作是平等的,因爲任何節點都可以包含子節點(包括子節點)。考慮到這一點,對於大多數樹我傾向於採取父 - >子方法,例如:
用戶表:
ID ParentID Name
1 0 Joe
2 0 Sally
3 2 Jim
現在,在該表中,喬&莎莉是根級別,而吉姆是薩莉的一個孩子(在這種情況下是僱員)。這可以繼續,與其他用戶是用戶是孩子,甚至是自己,別人的孩子等等....
這種方法的好處是,你讓所有的用戶在樹控制的面前人人平等。您不需要爲每個特定級別定製對象集合,也不需要用於確定用戶類型並將其注入到正確節點的複雜邏輯。如果您必須手動對它們進行排序,您只需要一個簡單的遞歸函數,根據它的ID(在本例中爲0)檢查父母的孩子。
至於實際的實現,至少在ASP.NET中,我會建議看看使用TreeView,HierarchicalDataSourceControl和HierarchicalDataSourceView。通過這三個對象,您可以相對快速地實現數據樹,並且使用的模式非常通用,因此您可以使用它來使用未來的數據對象。
我會一棵樹來管理關係,同時保持一個地圖來跟蹤節點本身的。
注意,我沒有實現出租,火,或促進方法。它們非常簡單,並且超出了基本結構的範圍(它們可以從下面的代碼中自我解釋,如果它們不立即跳出來,那麼你需要研究它是如何工作的爲你自己!)
class OrgChart {
// Assume these are properly constructed, etc...
static class Employee {
String name;
EmployeeID id;
Employee manager;
Set<Employee> underlings;
}
static class EmployeeID {
// what is the id? id number? division + badge number?
// doesn't matter, as long as it has hashCode() and equals()
}
Map<EmployeeID, Employee> employeesById = new HashMap...
Employee ceo = new CEO.getTheCEO();
public Employee getManagerfor(EmployeeID id) {
Employee dilbert = employeesById.get(id);
return dilbert.manager;
}
public Set<Employees> getEmployeesUnder(EmployeeID phbid) {
Employee phb = employeesbyId.get(phbid);
return phb.underlings;
}
}
感謝,發光,但ID不表示員工的職級。 id#1可能是看門人,#200可能是ceo。我正在看一個嵌套的B樹方法。你怎麼看? – OckhamsRazor
嗯,在我的例子中ID不代表排名。我只有一個ID到員工記錄的內部映射。至於你的B樹方法,我不得不明白你的意思。你在談論你的員工對經理關係嗎?因爲我認爲b-tree每個節點的兒童數量有限,這不是你想強加的東西。 (你可能有一個志願者經理,他在組織結構圖上有幾百個「僱員」。) – corsiKa
我想你需要解釋更多關於你想要的東西。至少我不清楚這一點。 – ath88
您應該詳細說明_「我們希望樹上的操作高效」_ – PengOne