Итак, если вы думаете о том, чтобы разбить свое дерево следующим образом: каждый слой имеет степень 2 ...
Layer0 - root -> 2^0 = 1 (first element)
Layer1 --------> 2^1 = 2 (next two elements)
Layer2 --------> 2^2 = 4 (next four elements)
Относительно тривиально разрушить структуру в следующей форме: [4], [5 | 2], [7 | 3 | 6 | 8]
То, что вы, вероятно, хотите, это иметь отношения, в которых 4 имеет детей 5 и 2, дети 5 лет - 7, а дети 3 и 2 - дети6 и 8.
Таким образом, вопрос заключается в том, как во время итерации по этому массиву узнать, каковы дети данного числа?Предполагая, что вы расположили элементы последовательно в индексируемой структуре данных, такой как массив, и каждый элемент имеет ровно два дочерних элемента или ни одного, вы можете создать свой «обход дерева» следующим образом:
Children of 4, которыйкак в индексе 0 (корень), будут индексы 2 ^ 0 и 2 ^ 1 (индексы 1 и 2). Дочерние элементы для индексов 1 и 2 будут (2 ^ 1 + 1) и (2 ^ 1 + 2).Дочерние элементы для индекса 2 будут 2 ^ 2 + 1 и 2 ^ 2 + 2.
Таким образом, схема сводится к 2 ^ i + 1 (для левого потомка), 2 ^ i + 2 (дляправильный ребенок).Я надеюсь, что это поможет с вашей реализацией дерева.