又称二叉链表表示法,将任意复杂的普通多叉树完美转换为二叉树形式进行物理存储
孩子兄弟表示法(Child-Sibling Representation)是一种用二叉链表结构存储普通多叉树的方案。在这种表示法中,每个节点包含两个指针:
一般的多叉树由于子节点数量不固定(可能为 0、2 或 10 个),很难用固定大小的结构体声明。孩子兄弟表示法通过把多叉树转换为标准的二叉树结构,使得我们可以直接借用二叉树的所有算法(遍历、高度计算等)来处理复杂的多叉树,极大地简化了代码逻辑。
// 1. 传统多叉树节点(孩子数量不固定,通常只能用 std::vector)
struct MultiTreeNode {
int val;
vector<MultiTreeNode*> children; // 指向所有孩子节点的指针数组
};
// 2. 孩子兄弟表示法(共享标准的二叉链表结构,极其紧凑)
struct CSNode {
int val;
CSNode* firstChild; // 指向左边第一个孩子(二叉树的左指针 left)
CSNode* nextSibling; // 指向紧邻的右边兄弟(二叉树的右指针 right)
};