java二进制搜索树找到最近的叶子

时间:2011-10-27 00:42:19

标签: java tree

我遇到一个找到最近叶子高度的方法有问题。我所拥有的只是所有的叶子。我是否必须将递归调用分成两个条件语句来独立检查每个条件语句?任何帮助或建议将不胜感激

这是我的方法

//find the distance to the closest leaf 
public int closeLeaf() 
{ 
    int distance;
    return distance = closeLeaf(root);
}

private int closeLeaf(StringNode n)
{
    int dist = 0;

    if(n == null)
    {
        dist = 0;//empty tree
    }
    else if(n.getLeft()== null && n.getRight()== null)
    {
        dist++;
    }

    else
    {

        dist =closeLeaf(n.getLeft()) + closeLeaf(n.getRight());



    }
    return dist;

}

2 个答案:

答案 0 :(得分:3)

返回值

请不要这样做:

int distance;
return distance = closeLeaf(root);

只需:

return closeLeaf(root);

关于真正的问题

这里你要加上每片叶子的距离:

dist = closeLeaf(n.getLeft()) + closeLeaf(n.getRight());

您可能只想获得两个值中的最小值(告诉您到最近值的距离)。

答案 1 :(得分:1)

而不是

  

dist = closeLeaf(n.getLeft())+ closeLeaf(n.getRight());

为遇到的每个节点递增dist,使用 static / 类成员变量,每次调用closeLeaf函数时该变量都会递增。

将递归限制为查找叶子,当找到一个叶子时,dist的值将为您提供最接近叶子的高度。