如果我理解你 - 你的樹看起來(可能)像這樣,其中.
表示一個有子節點但沒有「內容」的節點,AB
表示一個節點的文本內容爲「AB」。
.
/ | \
. DE .
/\ / | \
AB C FGH . L
/\
I JK
ie:一個具有3個子節點的根節點(1是包含文本「DE」的葉節點)。
我假設你已經有了你的數據結構,它將成爲一棵樹,每個節點可以有3個子節點,一個父節點和一個可選的文本字段。例如:
class Node
{
// NB: I would not implement the class exactly like this - for illustrative purposes only.
Node Left;
Node Mid;
Node Right;
string Text;
}
想要實現的是遍歷樹並連接所有文本在特定級別或低於特定級別?
因此,像,
- 級別4:I + JK = 「IJK」
- 3級:AB + C + FGH +(I + JK)+ L = 「ABCDFGHIJKL」
- 等級2:(AB + C)+ DE +(FGH +(I + JK)+ L)=「ABCDEFGHIJKL」
要以這種方式處理樹,您可能必須使用遞歸。您需要編寫一個recursive function來查找所需的節點,跟蹤深度等,並執行所需的文本/數據操作。
對此有幫助的一種方法是在插入時將每個節點的深度存儲在樹中,如果有控制權的話。
例如,剛剛發現你一定級別的所有節點的文本很簡單的遞歸函數可能看起來有點像這樣的東西:
//NB: Comes with no warrentee and untested :).
public string TextAtLevel(Node root, int maxLevel, int currentLevel)
{
currentlevel += 1;
if(currentLevel == maxLevel)
{
// stop the recursion, return text of this node
return root.Text;
}
else
{
//Recurse into the child nodes. Left to right, depth first.
return TextAtLevel(root.Left, maxLevel, currentLevel) +
TextAtLevel(root.Mid, maxLevel, currentLevel) +
TextAtLevel(root.Right, maxLevel, currentLevel)
}
}
Node treeRoot = LoadData(); // imagine tree being populated as per diagram.
string textAtLevel4 = TextAtLevel(treeRoot, 4, 0); // returns "IJK"
希望這可以幫助您開始使用。
來源
2011-10-26 09:58:30
xan
您嘗試提取的數據是否存在特定模式?另外,你的數組#3和#5是相同的。 –
你有樹嗎?還是你想做一棵樹?我在檢測這9個樣本中的邏輯時遇到了困難,你能把它寫成文字嗎? –
嗨!我已經有一棵樹了。和吉姆你是對的...... 3和5是相同的,這是我的錯誤......只要你能看到從左到右的所有部分創建「ABCDEFGHIJKL」的模式。 – user1013626