按顺序将树转换为数组
Convert Tree To Array by Inorder
我想按顺序将 AVL 树转换为数组,然后 return 通过函数 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*
更新:以下代码也有效!
您的代码在单个元素 array[i]
上以第 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;
}
我想按顺序将 AVL 树转换为数组,然后 return 通过函数 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*
更新:以下代码也有效!
您的代码在单个元素 array[i]
上以第 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;
}