Algorithm 如何将树拆分为具有偶数节点的最大子树?
看到这个问题如下,不知道如何解决: 给定任意树,将其拆分为尽可能多的子树 子树的节点数必须为偶数Algorithm 如何将树拆分为具有偶数节点的最大子树?,algorithm,Algorithm,看到这个问题如下,不知道如何解决: 给定任意树,将其拆分为尽可能多的子树 子树的节点数必须为偶数 有什么想法吗?类似的方法可能是,遍历树,获取每个节点的计数。如果计数为偶数,则添加节点 List<Node> subTrees = new List<Node>(); int GetCount(Node root) { if (root == null) return 0; return GetCount(root.Left) + GetCount(root.R
有什么想法吗?类似的方法可能是,遍历树,获取每个节点的计数。如果计数为偶数,则添加节点
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);
}
列表子树=新列表();
int GetCount(节点根)
{
if(root==null)返回0;
返回GetCount(root.Left)+GetCount(root.Right)+1;
}
无效构建子树(节点根)
{
if(root==null)返回;
如果(GetCount(root)%2==0){subTrees.Add(root);}
构建子树(root.Left);
构建子树(root.Right);
}
我假设它是一棵二叉树。如果不是,则不使用
左
或右
,而是检查它的所有邻居
我将把这个问题分解如下:
请澄清:根据我的理解,是否所有子树都有偶数个节点,或者我们应该有偶数个节点的最大子树数,问题是通过分解原始树来找到尽可能多的子树,但子树必须有偶数个节点。因此,如果树有奇数个节点,就没有解决方案了?@IvayloStrandjev,我考虑过这个问题,但问题没有给出这方面的信息。在我读了你的问题后,我开始考虑将节点数为偶数的树拆分为两个节点的子树。此解决方案假设不同的子树可以彼此共享节点。最初的问题没有提到这个属性。因此,我们可能必须解决这两种情况。1> 子树不能共享节点。2> 子树可以共享节点。如果是,则在将节点添加到列表之前,必须确保节点在任何节点中没有自身或任何子节点,并且在列表中没有其子节点。基本上是遍历树的另一种实用方法。