Преобразовать дерево в массив по Inorder - PullRequest
0 голосов
/ 08 декабря 2018

Я хотел бы преобразовать дерево AVL в массив по порядку и затем вернуть его функцией GetArray, по какой-то причине код не работает.Сохраняются только первые данные.

void InsertInArray(Node<T>* node,int int index,T** array)
    {   if(node==NULL)
            return;
    InsertInArray(node->LeftSon,index,array);
        array[index++]=node->data;
    InsertInArray(node->RightSon,index,array);
    }

  T** GetArray ()
    {
        T** array=new T*[this->size];
         InsertInArray(this->head,0,array);
         return array;
    }

// Данные относятся к типу T *

ОБНОВЛЕНИЕ: ТАКЖЕ РАБОТАЕТ СЛЕДУЮЩИЙ КОД!

1 Ответ

0 голосов
/ 08 декабря 2018

Ваш код сохраняет все данные в i-й глубине на одном элементе array[i] и, таким образом, дает сбой.Мы всегда должны сдвигать обратно все данные до array в качестве последнего элемента.

Самый простой способ сделать это - использовать std::vector::push_back.Хотя я не знаю весь код вашего проекта, я ожидаю, что следующий код будет хорошо работать для вас:

#include <vector>

void InsertInArray(Node<T>* node, std::vector<T>& array)
{
    if(node==NULL){
        return;
    }

    InsertInArray(node->LeftSon, array);
    array.push_back(node->data);
    InsertInArray(node->RightSon, array);
}

std::vector<T> GetArray()
{
    std::vector<T> array;
    InsertInArray(this->head, array);

    return array;
}
...