【发布时间】:2014-11-23 23:44:15
【问题描述】:
我有一个结构 s:
struct s{
int x;
/********************************************************************
* NoOfchild doesn't represent maximum no of children for node s .
* This represent no of children node s have at any given instance .
*********************************************************************/
int NoOfChild;
s **child;
}
我想用**动态声明指针数组。节点 s 被一一添加到数组中。有什么方法可以实现。这棵树将用于FpGrowth Algorithm。
*(0)
|
_____________________________________________________________
| | |
[* (1) *(2) *(3)]
| | |
_______________ _________________ __________________________
| | | | | | | | | | | | |
[* * * *] [* * *] [* * * * * *]
** 代表节点 s 。我不想 declare all children of a node at the same time 即我想添加子节点 one by one ,只要它是 required 。例如o 被添加为根节点,然后节点 1 被添加为根节点的子节点(如果需要),然后节点 2 被添加,依此类推。[* * * * ] 表示节点 x 的子节点。
编辑:
对于给定的节点,人们将 NoOfChild 假设为 maximum no of a child,这是不正确的,这里 NoOfChild 表示一个节点在给定实例中有多少个子节点,它可能会根据要求或时间而有所不同。
说明:强>
最初节点 0 已初始化,因此它有零 (0) 个子节点。
然后将节点 1 添加为节点 0 的子节点,因此 o->NoOfChild = 1 和 1 ->NoOfChild = 0 ;
然后将节点 [*] 添加为节点 1 的子节点,因此 0->NoOfChild = 1 和 1 ->NoOfChild = 1 ;
然后将 2 添加为节点 0 的子节点,因此 0->NoOfChild = 2 和 1 ->NoOfChild = 1 ;
等等。
编辑:
终于用vector<s*> child了。
【问题讨论】:
-
使用
vector<s*>,甚至vector<s>。 -
如果你在 C++ 中做,那么使用向量或列表,而不是数组。节省一些内存和头痛。
-
是的,这是可能的,但它过于复杂。它是一棵树,而不是一般图,因此您可以使用
s的数组而不是s*的数组,并避免无用的间接寻址。此外,像std::vector这样的容器会让您省去很多麻烦。 -
@user3919801 然后你可以做类似于
std::vector所做的事情,并分配比你需要的更多,区分“大小”(您存储的实际元素的数量)和“容量”(数量您可以适合分配的元素)。当然,您应该只在 C 中采用这种方法。如果您使用的是 C++,那么您应该只使用std::vector,正如其他人所指出的那样。 -
一个简单的想法是指向第一个孩子,如果没有其他孩子,这个孩子指向它的下一个兄弟或自己。
标签: c++ data-structures tree