Solidity
Solidity中的遞歸結構
我正在嘗試牢固地實現二叉樹。
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; }
您也可以使用 a
mapping
代替數組。