CTreeNode、CTreePos到底是什么数据结构?各位前辈指点一下

之前在看ie5.5的那个代码里结构是这样的:
CTreeNode
{
    // Use GetBeginPos() or GetEndPos() to get at these members
    CTreePos    _tpBegin;                           // The begin CTreePos for this node
    CTreePos    _tpEnd;                             // The end CTreePos for this node
}

CTreePos
{
    // distributed order-statistic fields
    DWORD       _cElemLeftAndFlags; // number of elements that begin in my left subtree
    DWORD       _cchLeft;           // number of characters in my left subtree
                                    // structure fields (to maintain the splay tree)
    CTreePos*   _pFirstChild;       // pointer to my leftmost child   第一个孩子(有可能是左,也有可能是右)
    CTreePos*   _pNext;             // pointer to right sibling or parent    右兄弟或者父亲
}

据这篇文章说是伸展树:
http://zenhumany.blog.163.com/bl ... 332013102923627578/

5.5的结构还没搞明白,然后实际调试时发现ie8的CTreePos结构变成了4个指针,
根据上面那篇文章里的分析是这样的:
pInsertCTreePos->BeginBefore = pBeforeCTreePos
pInsertCTreePos->BeginAfter = pAfterCTreePos
pInsertCTreePos->EndBefore = pBeforeCTreePos
pInsertCTreePos->EndAfter = pAfterCTreePos

这下更糊涂了,这到底是什么数据结构?
请前辈们指点一下