【发布时间】:2015-03-08 22:44:28
【问题描述】:
我有一个图形数据结构,我需要复制其中的一部分。每个节点最多有两个孩子,为了这个问题可以假设如下表示:
struct node {
int type;
struct node *child1, *child2;
};
类型字段指示(仅在叶子中)节点是必须复制、不得复制还是可以复制。
我有一个根节点,需要返回从该节点可访问的子图的副本。必须复制某些叶节点,并且必须与原始图共享某些叶节点。由于原始图不得损坏,因此如果必须复制非叶节点,则必须复制其任何子节点。显然,我宁愿只复制那些我必须复制以满足要求的节点,尽管通过复制所有非叶节点来满足要求。
仅复制最小集合对于树来说是微不足道的,但此图可能包含循环。是否有一种有效的算法来仅复制所需的节点?特别是,不需要计算所有父指针或迭代直到找到固定点?
【问题讨论】: