Как создать массив со структурой древа, где элементы расположены по уровням?

Как правильно построить древовидный массив по уровням, чтобы избежать добавления дочерних массивов предыдущих родителей на втором уровне?
  • 22 ноября 2023 г. 14:31
Ответы на вопрос 2
Для создания массива со структурой древа, где элементы расположены по уровням, можно использовать следующий подход:

1. Создайте структуру или класс для представления узла дерева. В этой структуре должны быть поля для хранения данных узла и указателей на его родителя и детей (если это необходимо).

2. Создайте массив, который будет использоваться для хранения узлов дерева. Назовем его "treeArray".

3. Найдите корневой узел вашей структуры дерева и добавьте его в "treeArray".

4. Создайте вспомогательные переменные "currentLevel" и "nextLevel", которые будут использоваться для отслеживания текущего уровня и следующего уровня дерева.

5. Начните итерацию по "treeArray" для каждого уровня дерева. Для каждого узла на текущем уровне добавьте его дочерние узлы (если они есть) в "nextLevel".

6. После того как все узлы на текущем уровне добавлены в "nextLevel", присвойте значение "nextLevel" переменной "treeArray", чтобы перейти к следующему уровню.

7. Повторяйте шаги 5 и 6 до тех пор, пока все узлы дерева не будут добавлены в "treeArray" в соответствии с их уровнями.

Пример кода на Python:

```python
class Node:
    def __init__(self, data=None, parent=None, children=None):
        self.data = data
        self.parent = parent
        self.children = children if children else []

def create_tree_array(root):
    tree_array = [root]
    current_level = [root]

    while current_level:
        next_level = []
        for node in current_level:
            next_level.extend(node.children)
        tree_array.extend(next_level)
        current_level = next_level

    return tree_array
```

В этом примере мы создаем узлы дерева с использованием класса Node. Затем мы используем функцию "create_tree_array" для создания массива "treeArray" с узлами, расположенными по уровням.
Функция createTree принимает два аргумента: $data - список данных для построения дерева, и $params - параметры для настройки построения дерева. Внутри функции используется оператор extract, который извлекает значения из массива $params и присваивает их в виде переменных. Если в $params не указаны значения для ключей 'levelKey' и 'childrenKey', то используются значения по умолчанию - 'level' и 'children'.

В начале функция создает пустой корневой массив $root.

Затем происходит итерация по каждому элементу $data. Переменная $arr ссылается на корневой массив $root.

Далее, переменная $level присваивается значению $data[0][$levelKey], где $data[0] - первый элемент списка данных $data, и $levelKey - значение ключа уровня для каждого элемента данных. Внутри цикла while условие проверяет, что значение ключа уровня текущего элемента ($d[$levelKey]) больше текущего уровня ($level++). Если условие выполнено, то переменная $arr обновляется, чтобы ссылаться на последний элемент массива $arr[$childrenKey] (дочерний массив).

После цикла while текущий элемент данных $d добавляется в конец массива $arr, с использованием оператора объединения массивов (+). Ключ 'childrenKey' присваивается пустому массиву, чтобы создать место для дочерних элементов.

В конце функция возвращает построенное дерево $root.

Используя функцию createTree, переменная $tree получает значение построенного дерева, используя список данных $arMenu и параметр 'levelKey' со значением 'LEVEL'.
Похожие вопросы