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;
}
啊,是的,我和你在一起。太好了。谢谢你的帮助:)