Если я вас понимаю - ваше дерево выглядит (потенциально) так, где .
обозначает узел с дочерними элементами, но без «содержимого», а AB
обозначает узел с текстовым содержимым «AB».
.
/ | \
. DE .
/ \ / | \
AB C FGH . L
/ \
I JK
т.е.: один корневой узел с 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"
Чтобы работать с деревьями таким образом, вам, вероятно, придется использовать рекурсию. Вам нужно написать рекурсивную функцию , чтобы найти нужные вам узлы, отслеживать глубину и т. Д. И выполнять нужные операции с текстом / данными.
Помочь в этом может то, что каждый узел сохранит свою глубину в дереве при вставке, если вы им управляете.
Например, очень простая рекурсивная функция, которая просто находит текст всех узлов определенного уровня, может выглядеть примерно так:
//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"
Надеюсь, это поможет вам начать.