C++标准库stl中没有现成的树的数据结构,但是一般都可以通过已有数据结构自定义获得:
假设定义树节点如下:(非二叉树,普通的树)
//****************************************************************//
//****节点 ****//
//****************************************************************//
template <class T>
struct TreeNode {
T _data;
TreeNode *_parent;
list<TreeNode*> _children;
TreeNode(const T &data) : _data(data), _parent(NULL) {}
const T &data() { return _data; }
bool setParent(TreeNode *parent)//挂接父节点
{
if (parent == this->_parent)//如果相同,则无需变动
return true;
if (parent)//加入新父节点的子节点列表中
{//注意:如果本节点为新父节点的某个祖先节点(包括新父节点本身),则不允许建立;
TreeNode *ancestor = parent;
while (ancestor && ancestor != this) ancestor = ancestor->_parent;
if (ancestor) return false;//禁止