Estructura recursiva en solidez

Estoy tratando de implementar un árbol binario en solidez.

struct BTree{
  uint x;
  BTree lesser;
  BTree greater;
  bool    nil;
}

Me acabo de dar cuenta de que esto no es posible ya que la definición de estructura no puede ser recursiva. ¿Hay algún trabajo posible para lograr mi objetivo?

Respuestas (2)

Acabo de escribir una publicación de blog sobre listas doblemente enlazadas que debería ayudar: https://programtheblockchain.com/posts/2018/03/30/storage-patterns-doubly-linked-list/ .

No puede tener estructuras recursivas, y no hay punteros, por lo que tiene que hacer las suyas propias. Agregue cada nodo a una matriz y use el índice de la matriz como un "puntero". Algo como esto:

struct BTree {
    uint x;
    uint lesser;   // an index into btrees array
    uint greater;  // ditto
    bool nil;
}
BTree[] btrees;
suena inteligente Voy a intentar esto pronto.

La recursividad es posible indirectamente:

struct BTree {
  uint x;
  BTree[] children;
  bool nil;
}

También puede usar a en mappinglugar de la matriz.