C ++ ntree实体树实现

时间:2014-01-22 01:50:34

标签: c++ tree

我知道之前有这样一个问题,特别是在这个网站上,但我看到了数百个答案,但这些答案并没有满足我的需要。我对提出这样一般性问题表示歉意。

我需要一个树实现来为我正在用C ++实现的国际象棋游戏生成可能的板状态。所以这是要求:

  • 只有一个头节点,
  • 多个(未知数量)子节点,
  • 树的未知(动态)高度
  • 树不会平衡,有些树枝可能被切断

以下是我要存储的数据:

// A tree's contents will only be composed of this variable
ChessModelConstants::ChessPiece m_gameBoard[8][8];

typedef char PieceType, PieceColor;

    //Variable is as follows
    struct ChessPiece {
    // A simple Constructor with default values
    ChessPiece(PieceType pieceType = ChessModelConstants::TYPE_EMPTY, 
               PieceColor pieceColor = ChessModelConstants::COLOR_WHITE) :
               m_pieceType(pieceType), m_pieceColor(pieceColor) 
    {
    }

    // Members
    PieceType m_pieceType;
    PieceColor m_pieceColor;
};

我在哪里可以找到/实现这样的树?我想提一下Boost目前不适合我。任何STL或强大的手动实现都可以。提前谢谢。

PS:我找到了我正在调查的this网站。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你需要这样的东西吗?

template<typename T>
class TreeItem
{
public:
    TreeItem<T> (T data)
        : m_data (data)
    {
    }

    TreeItem<T> (const TreeItem& item)
        : m_data (item.m_data)
    {
        m_children = item.m_children;
    }

    TreeItem<T>& AddChild (TreeItem<T>& item)
    {
        m_children.push_back (item);
        return *m_children.rbegin();
    }

    TreeItem<T>& AddChild (T data)
    {
        m_children.push_back (TreeItem<T>(data));
        return *m_children.rbegin();
    }

    std::vector<TreeItem<T> >& GetChildren ()
    {
        return m_children;
    }

    T& GetData()
    {
        return m_data;
    }

private:
    T m_data;
    std::vector<TreeItem<T> > m_children;
};

// usage example
ChessBoard emptyBoard;

TreeItem<ChessBoard> root (emptyBoard);
root.AddChild (emptyBoard).AddChild(emptyBoard);