struct SinglyLinkedListNode {
int value;
struct SinglyLinkedListNode* next;
};
struct DoublyLinkedListNode {
int value;
struct DoublyLinkedListNode* next;
struct DoublyLinkedListNode* prev;
};
struct BinaryTreeNode {
int value;
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
struct BinaryTreeNode* parent; // this is optional
};