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

java binary search tree find closest leaf

我很难找到最接近叶子的高度。我只计算了所有的叶子。我是否需要将递归调用分成两个条件语句来分别检查每个条件语句?如有任何帮助或建议,我们将不胜感激。

这是我的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//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;

}


返回值

请不要这样做:

1
2
int distance;
return distance = closeLeaf(root);

公正:

1
return closeLeaf(root);

号关于真正的问题

在这里,你把每片叶子的距离加起来:

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

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


而不是

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

对于遇到的每个节点,使用一个每次调用closeLeaf函数时都会递增的类成员变量,该变量会增加dist

将递归限制为查找叶,当找到叶时,EDOCX1的值(0)将给出最近叶的高度。