树的孩子兄弟表示法

又称二叉链表表示法,将任意复杂的普通多叉树完美转换为二叉树形式进行物理存储

什么是孩子兄弟表示法?

孩子兄弟表示法(Child-Sibling Representation)是一种用二叉链表结构存储普通多叉树的方案。在这种表示法中,每个节点包含两个指针:

为什么它很重要?

一般的多叉树由于子节点数量不固定(可能为 0、2 或 10 个),很难用固定大小的结构体声明。孩子兄弟表示法通过把多叉树转换为标准的二叉树结构,使得我们可以直接借用二叉树的所有算法(遍历、高度计算等)来处理复杂的多叉树,极大地简化了代码逻辑。

点击"单步演示转换"来一步步将左侧的普通多叉树在空间中扭转并重组连线,变成右侧规范的孩子兄弟二叉树。
普通多叉树 (Multi-way Tree)
转换后的二叉树 (LCRS Binary Tree)

C++ 结构体对比

物理存储结构的转换
// 1. 传统多叉树节点(孩子数量不固定,通常只能用 std::vector)
struct MultiTreeNode {
    int val;
    vector<MultiTreeNode*> children; // 指向所有孩子节点的指针数组
};

// 2. 孩子兄弟表示法(共享标准的二叉链表结构,极其紧凑)
struct CSNode {
    int val;
    CSNode* firstChild;  // 指向左边第一个孩子(二叉树的左指针 left)
    CSNode* nextSibling; // 指向紧邻的右边兄弟(二叉树的右指针 right)
};