如何使用偶数节点将树拆分为最大子树?

时间:2014-02-20 21:27:56

标签: algorithm

看到这个问题如下,并且不知道如何解决它:

给定一棵任意树,将它分成尽可能多的子树,然后分成 子树的节点数必须是偶数。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这样的事情可能是,遍历树,计算每个节点。如果计数是偶数,则添加节点。

List<Node> subTrees = new List<Node>();

int GetCount(Node root)
{
   if (root == null) return 0;
   return GetCount(root.Left) + GetCount(root.Right) + 1;
}
void BuildSubTrees(Node root)
{
   if (root == null) return;

   if(GetCount(root) % 2 == 0){subTrees.Add(root);}
   BuildSubTrees(root.Left);
   BuildSubTrees(root.Right);
}

我认为它是二叉树。如果不是,则代替leftright,完成所有neighbors

答案 1 :(得分:1)

我会将此问题解决如下:

  1. 遍历树。树中的每个节点代表主树的子树
  2. 将树的每个节点的引用保存在数组中。
  3. 遍历数组并确定每个根的节点的权重或数量。
  4. 输出/过滤权重为偶数的子树参考数组(来自步骤2)。