我在这里有这个简单的方法:
private Node addItem(Node current, Node target) {
if (current.data.getId() < target.data.getId()) {
if (current.larger == null) {
current.larger = target;
Log.i("BinaryTree", "Added item: " + target.data.getId());
return target;
}
return addItem(current.larger, target);
} else {
if (current.smaller == null) {
current.smaller = target;
Log.i("BinaryTree", "Added item: " + target.data.getId());
return target;
}
return addItem(current.smaller, target);
}
}
当我调试它时,代码到达'return target;'行,然后跳过它并转到最后一个return语句 - 'return addItem(current.smaller,target);'! 我一生中从未见过像这样的WTF吗?!?!
答案 0 :(得分:8)
您可能已经看到调试跳转'返回'一种方法。
你正在调用addItem递归;所以最后的回报,它实际上会添加它并返回; “似乎”会跳转到另一个回归,只是因为方法调用你从那里发起的回归。
答案 1 :(得分:2)
如果它到达那个return语句那么它肯定应该从该方法返回。如果您无法判断(因为它是递归的),请尝试放置一些System.out.println()
语句。
例如:
...
Log.i("BinaryTree", "Added item: " + target.data.getId());
System.out.println("Returning: " + target.toString());
return target;
...