寻找最大的二进制子树

时间:2012-07-04 19:47:52

标签: java recursion

对于那个问题,我尝试了递归解决方案,这往往是真的。然而不知何故,它适用于一些树木,无法找出原因。假设您有一个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;
    }   
}
}

0 个答案:

没有答案