1.TreeNode:
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
2.ListNode:
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
3.TreeLinkNode:
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
TreeLinkNode(int x) :
val(x), left(NULL), right(NULL), next(NULL) {
}
};
在TreeNode的基础上,额外横向增加一个链接节点,数据的序列化格式在TreeNode的基础上,额外增加next节点的数据,图中红色链路为next
上图中2节点的next为3节点,以上链接二叉树会被序列化为 {[1,2,3,#,#,4,#,#,5],[#,3,#,#,#]}
注意这个数据结构中,所有的节点val必须不同,否则OJ在解析数据的时候后半段的link数据就无法定位准确的节点
4.RandomListNode:
struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};
在ListNode基础上,额外增加一个random的链接节点,数据的序列化格式在ListNode的基础上,额外增加random节点的数据,图中红色链路为random
上图对应测试数据为 {-1,8,7,-3,4,4,-3,#,#,8},前五个数字是链表节点,后五个数字表示各个节点的random的链接点
注意这个数据结构中,所有的节点label必须不同,否则OJ在解析数据的时候后半段的random数据就无法定位准确的节点