如果我有這樣的樹:遞歸搜索對家長>兒童的關係,應用布爾到分支
A
B
C
D
E
F
如果C
用戶搜索,我想遞歸地鑽到樹,設置財產C
(在本例中稱爲Expanded
)爲true ...但是也在其父母上設置了該財產,因此A
,B
和C
將Expanded
設置爲true。
我如何用遞歸完成這樣的事情?
我有一個解決方案(抽象地)設置樹中最深的孩子的屬性,但是當展開的時候我遇到了一個問題,試圖在它的每個父級上設置該屬性。
如果我有這樣的樹:遞歸搜索對家長>兒童的關係,應用布爾到分支
A
B
C
D
E
F
如果C
用戶搜索,我想遞歸地鑽到樹,設置財產C
(在本例中稱爲Expanded
)爲true ...但是也在其父母上設置了該財產,因此A
,B
和C
將Expanded
設置爲true。
我如何用遞歸完成這樣的事情?
我有一個解決方案(抽象地)設置樹中最深的孩子的屬性,但是當展開的時候我遇到了一個問題,試圖在它的每個父級上設置該屬性。
我的代碼假定每個Node
有子Nodes
的集合。
第一步是檢查當前的Node
是否匹配(在本例中爲value
)。如果是,請設置Expanded
屬性並將true
返回給調用者。
否則,迭代子節點並遞歸調用DoSearch
。如果任何子節點匹配,則設置Expanded
屬性當前爲Node
,並將true
返回給調用者。
bool DoSearch(Node n, int value)
{
if (n.Value == value)
{
n.Expanded = true;
return true; // let the caller know that the value was found
}
foreach (Node child in n.Nodes)
{
if (DoSearch(child, value)) // a child contains the value
{
n.Expanded = true;
return true; // let the caller know that the value was found
}
}
return false; // not found
}
你不需要遞歸函數來實現這一點。在設置擴展屬性的同時找到您想要的節點並遍歷到根目錄。
var runner = FindNode('C');
while(runner) {
runner.expanded = true;
runner = runner.parent;
}
你能顯示實際的代碼嗎? –
爲什麼你用c#和javascript標記這個?無論哪種方式,沒有任何結構,這就要求很多回答者,因爲爲了回答這種類型的問題,它需要他們不僅創建數據結構和命名約定,還要創建*提議的解決方案一個推測。 –
大多數人回答了它。我只是想考慮如何考慮dfs算法。修改後的版本會給你你所期待的。 – arunk2