【问题标题】:What if the root of a tree is changed?如果一棵树的根被改变了怎么办?
【发布时间】:2014-07-05 06:18:54
【问题描述】:

给定一棵树(通过树,我的意思是 N 个节点,N-1 个边并且它是连接的)树的根被更改为可以说 r。现在给定另一个节点让我们说 t ,您必须找到以 t 为根的子树中所有节点的总和。 我试图在 c++ 中实现它。

std::map<int, std::vector< pair<int,int> > > map;

如果我遍历矢量 map[t] ,我必须确保它不会进入通向 r 的路径。我将如何确保这一点? 考虑到树的根可能会改变的条件,还有更好的方法在 c++ 中存储树吗?我认为会有,因为地图没有传达任何关于 root 的信息。 :)

【问题讨论】:

    标签: c++ algorithm tree graph-algorithm


    【解决方案1】:

    问题是您将树存储为通用图。因此,对于给定的顶点,您不知道哪个是通向根(即父级)的弧。

    解决方案很大程度上取决于上下文。一个简单的解决方案是从 r 开始并寻找 t 的深度优先搜索。一旦找到 t,您也找到了 t 的父节点,并且您可以轻松识别从 t 开始的子树。

    您也可以从 t 开始寻找 r。当你找到 r 时,你就找到了 t 的父节点,你可以遍历所有其他弧来找到 t 的子树。

    关于图的另一种表示,通常最好保留一个顶点列表,并为每个顶点保留一个相邻顶点列表,如下所示:

    std::map<int, std::list<int> >
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2012-08-01
      相关资源
      最近更新 更多