Ссылка на вопрос- [Ссылка] [1]
В основном нам дается массив целых чисел и его размер. Вопрос в том, чтобы построить из него бинарное дерево. Каждый индекс соответствует данным, хранящимся в узле, а значение этого индекса является данными родителя. Значение индекса узла root всегда будет -1, так как для root нет родительского элемента. Результатом будет отсортированный обход дерева в порядке уровней.
Теперь мой подход состоит в том, что я анализирую массив от 1 до n (не 0-й элемент / root узел), и для каждого элемента я получить его родителем, используя первую функцию, и соответственно вставить дочерний элемент. Но один конкретный тестовый пример терпит неудачу. Возможно, собственный вывод веб-сайта неверен. Я опубликую все ниже: -
Пример тестового примера -
Размер массива-7
Элементы- -1 0 0 1 1 3 5
Выход - 0 1 2 3 4 5 6
Частный тестовый пример (в чем я сомневаюсь) -
Размер массива - 42
Элементы - 3 19 1 41 35 29 27 11 17 23 9 15 33 13 39 23 19 25 21 1 33 15 31 21 5 7 37 29 7 11 31 39 -1 27 3 9 25 17 13 41 37 35
Вывод веб-сайта - 32
Мой вывод - 0
Функции
void getParent(Node* root, int val, Node* &main)
{
if(root==NULL) return;
if(root->data==val){
main=root;
return;
}
getParent(root->left,val,main);
getParent(root->right,val,main);
}
Node *createTree(int parent[], int n)
{
if(n==0) return NULL;
Node * root=new Node(0);
for(int i=1;i<n;i++)
{
Node* main=NULL;
getParent(root,parent[i],main);
//main has the parent
Node* child=new Node(i);
if(main==NULL) break;
if(main->left==NULL)
{
main->left=child;
}
else if(main->right==NULL)
{
main->right=child;
}
}
return root;
}
[1]: https://www.geeksforgeeks.org/construct-a-binary-tree-from-parent-array-representation/
[2]: https://i.stack.imgur.com/0fRmn.png