通过数组在指针上实现树的优点?

时间:2016-06-24 16:14:28

标签: c++ tree

最近我学会了按结构实现树,例如

struct Node{
     Node *parent;
     vector<Node*> child;
     Node(void):parent(nullptr){}
}

我认为这是实现树的一种非常直接的方式, 并且在结构中包含更多的进程内容也更容易。

然而,我注意到很多人的代码, 他们更喜欢使用数组而不是指针。 我可以理解Binary Tree,因为它也很容易通过数组来实现 ,但为什么在其他更复杂的图表上?

1 个答案:

答案 0 :(得分:1)

来自Skiena:2008:ADM:1410219和Cormen:2001:IA:580470比较图的邻接矩阵和邻接列表得出:

  • 如果(x, y),两个节点具有连接边缘,则邻接矩阵的测试速度更快
  • 邻接列表可以更快地找到给定节点的度数(邻居数量)。
  • 如果使用邻接列表实现,m节点和n边缘的图表占用m + n空间,而邻接矩阵则为n^2
  • 邻接矩阵对大图使用略少的内存。
  • 边缘插入/删除在使用邻接矩阵时在O(1)中执行。
  • 遍历使用邻接列表实现的图表在Θ(m + n)和矩阵Θ(n^2)
  • 中执行

如果图形有很多顶点但边缘很少,则邻接矩阵消耗过多的内存。

因此,通常邻接列表表现更好。