Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 树遍历中的条件计数节点-递归_Java_Recursion_Binary Search Tree - Fatal编程技术网

Java 树遍历中的条件计数节点-递归

Java 树遍历中的条件计数节点-递归,java,recursion,binary-search-tree,Java,Recursion,Binary Search Tree,处理大学作业时,需要比较树中的节点,并计算满足特定条件的节点数。我可以看到如何以迭代的方式完成这项工作,使用堆栈遍历树等等,但我确信讲师们正在寻找递归解决方案,我正在努力了解这个特定的实现 我目前的(有缺陷的)实施是: public int traverseIncrement(User user, User reference) { if(user == null) return 0; int count = 1; if (user.getLeft(

处理大学作业时,需要比较树中的节点,并计算满足特定条件的节点数。我可以看到如何以迭代的方式完成这项工作,使用堆栈遍历树等等,但我确信讲师们正在寻找递归解决方案,我正在努力了解这个特定的实现

我目前的(有缺陷的)实施是:

public int traverseIncrement(User user, User reference) {

    if(user == null)
        return 0;

    int count = 1;

    if (user.getLeft() != null) {
        if(user.getLevel() > reference.getLevel()) {
            count += traverseIncrement(user.getLeft(), reference);
        }
    }

    if (user.getRight() != null) {
        if(user.getLevel() > reference.getLevel()) {
            count += traverseIncrement(user.getRight(), reference);
        }
    }

    return count;       
}

有两个明显的问题,第一个是第一个节点从未被计算,第二个是我总是比要求的输出高一个。任何正确方向的轻推都会有帮助

我认为这两个问题是相关的。与其假设
count
为1,然后根据条件是否满足而递归,不如根据条件设置
count
,然后递归。换句话说,将给定节点的计算留给处理该节点的调用

此外,您还可以取消对左或右为
null
的检查,因为您的函数已经检查了条目

public int traverseIncrement(User user, User reference) {
    if(user == null)
        return 0;

    int count = (user.GetLevel() > reference.getLevel()) ? 1 : 0;

    count += traverseIncrement(user.getLeft(), reference);
    count += traverseIncrement(user.getRight(), reference);

    return count;
}

啊,是的,我和你在一起。太好了。谢谢你的帮助:)