【问题标题】:java binary search tree find closest leafjava二叉搜索树找到最近的叶子
【发布时间】:2011-10-27 00:42:19
【问题描述】:

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

这是我的方法

//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;

}

【问题讨论】:

    标签: java tree


    【解决方案1】:

    返回值

    请不要这样做:

    int distance;
    return distance = closeLeaf(root);
    

    只是:

    return closeLeaf(root);
    

    关于真正的问题

    在这里,您将与每片叶子的距离相加:

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

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

    【讨论】:

    • 我想到了,结果却是 0
    • @alexthefourth - 抱歉,您可能需要这两个加一中的最小值(对于当前节点)。
    【解决方案2】:

    代替

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

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

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

    【讨论】:

    • 变量会超出方法范围吗?
    • @alexthefourth。我希望它超出方法。但是您也可以使用静态变量。取决于你的选择。
    • 我以前没见过,自从我的第二个 java 课以来我没见过很多。但是你能给我一个关于将要实施的hwo的粗略想法吗?每次调用 closeLEaf 时,我是否必须添加另一种方法来增加变量?
    • @alesthefourth。看看这里。 (download.oracle.com/javase/tutorial/java/javaOO/variables.html)。简而言之,如果可以,请阅读 Oracle java 教程一次。它将帮助您快速掌握窍门。
    • @Brendan Long。它的确是。这不会错,但肯定会糟糕。谢谢指正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2021-12-28
    相关资源
    最近更新 更多