0

我如何使用tree.hh:一个类似 STL 的 C++ 树类来填充我的树并获得下面的树。一些帮助将不胜感激。A 和 G 是根节点谢谢

            A            G
      ______|____        |
     /      |    \       |
    B       C     D      H
    |       |     |      |
    |       E     |      |
     \_____/      |      |
        |         |      |
        F         |      |
        |_________|______|
           |
           I
           |
           J

在上面的代码中,我使用深度优先搜索来枚举列表中的项目。我很少有像这样格式化的数据

typedef tree<std::string> TreeNode;
typedef struct
{
    int   nBases;
    char * name;
} BASES;
BASES rgbases[] =
{
    {0xB, "J"},
    {0xA, "I"},
    {0x1, "H"},{0x0, "G"},
    {0x5, "F"},{0x2, "E"},{0x1, "C"},{0x0, "A"},
    {0x1, "D"},{0x0, "A"},
    {0x1, "B"},{0x0, "A"}
};

//here i'm trying to populate my tree
void populateTree(TreeNode &tr, BASES *pBaseArray, int numBase)
{
    int n = 0;
    while ( n < numBase )
    {
        BASES *pBase = &pBaseArray[n];
        if ( pBase->nBases > 0) // Check for children of the new node
            populateTree(tr, pBaseArray + (n + 1),pBase->nBases);
        // i suppose i need to insert tree code part here
        n += pBase->nBases + 1;
    }
}
void BuildTree(TreeNode &tr)
{
    populateTree(tr, rgBases, _countof(rgBases));
}
4

1 回答 1

0

在删除连接节点 A 与 B 和 D 的边(或者可能是连接节点 A 与 C 和 D 的边)时,可以获得一棵跨越所呈现的原始图的树。然后树类将适用:

            A            G                                   A            G 
            |            |                             ______|            |
            |            |                            /                   |
    B       C     D      H                           B       C     D      H 
    |       |     |      |                           |       |     |      | 
    |       E     |      |                           |       E     |      | 
    \______/      |      |                           \______/      |      |
        |         |      |                              |          |      |
        F         |      |                              F          |      |
        |_________|______|                              |__________|______| 
           |                                                | 
           I                                                I
           |                                                |
           J                                                J 

上述树中引起循环的边缘,可以单独记录,即 AB 和 AD,可以在树类之外的结构中记录。用这种结构合并树将恢复原始图。

于 2012-05-02T02:59:58.467 回答