代码之家  ›  专栏  ›  技术社区  ›  Sam12

按顺序将树转换为数组

  •  1
  • Sam12  · 技术社区  · 6 年前

    我想通过inorder将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 回复  |  直到 6 年前
        1
  •  1
  •   Hiroki    6 年前

    您的代码在单个元素上以第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;
    }