对于那个问题,我尝试了递归解决方案,这往往是真的。然而不知何故,它适用于一些树木,无法找出原因。假设您有一个isLeaf方法。这大致是我做的。
简单地假设你有那棵树:
A(BC) - A的B和C子女
B(DE) - B的D和E儿童
首先,我通过递归下降到D并检查它是否为叶子。如果它是一片叶子,我将它保存到一个新的Entry对象。然后走到E(这是B的正确的孩子)并再次保存它。之后,我比较这三个对象的元素并找到最大值。最后一步,我返回了具有子树最大值的新对象。
和Ps,不要粘在String对象周围。我稍后会在另一堂课中使用它。
问候。
public static Entry <String> max(Entry <String> e)
{
if(isLeaf(e))
return e;
else
{
if(e.left_child != null && e.right_child != null)
{
Entry <String> left = max(e.left_child);
Entry <String> right = max(e.right_child);
int max = Integer.parseInt(left.element);
int s1 = Integer.parseInt(right.element);
int s2 = Integer.parseInt(e.element);
if(max<=s1)
max = s1;
if(max <=s2)
max = s2;
if(max <= max + s2)
max = max + s2;
if(max <= max + s1)
max = max + s1;
if (max <= max + s1 +s2)
max = max + s1 + s2;
Entry <String> fnl = new Entry<String>(Integer.toString(max));
return fnl;
}else if (e.left_child != null && e.right_child == null)
{
Entry <String> left = max(e.left_child);
int max = Integer.parseInt(left.element);
int s2 = Integer.parseInt(e.element);
if(max <s2)
max = s2;
if(max < max + s2)
max = max + s2;
Entry <String> fnl = new Entry<String>(Integer.toString(max));
return fnl;
}else
{
Entry <String> right = max(e.right_child);
int max = Integer.parseInt(right.element);
int s2 = Integer.parseInt(e.element);
if(max <s2)
max = s2;
if(max < max + s2)
max = max + s2;
Entry <String> fnl = new Entry<String>(Integer.toString(max));
return fnl;
}
}
}