Solidity

Solidity中的遞歸結構

  • October 10, 2019

我正在嘗試牢固地實現二叉樹。

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

剛剛意識到這是不可能的,因為結構定義不能遞歸。是否有任何解決方法可以實現我的目標?

我剛剛寫了一篇關於雙向鍊錶的部落格文章,應該會有所幫助:https ://programtheblockchain.com/posts/2018/03/30/storage-patterns-doubly-linked-list/ 。

你不能有遞歸結構,也沒有指針,所以你必須自己做。將每個節點添加到數組中,並將數組中的索引用作“指針”。像這樣的東西:

struct BTree {
   uint x;
   uint lesser;   // an index into btrees array
   uint greater;  // ditto
   bool nil;
}
BTree[] btrees;

遞歸是可能的間接:

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

您也可以使用 amapping代替數組。

引用自:https://ethereum.stackexchange.com/questions/44392