我有一个任务,我需要一些方法方面的帮助。
所以我有一棵这样的树:
A
/ \
B C
/ \ / \
D E F G
/ \
H I
/ \
J K
我的方法是:
public BinaryTree preorderNext(BinaryTree t, BinaryTree v, BinaryTree prev) {
prev = t;
if(t.getLeft() != null) {
preorderNext(t.getLeft(), v, prev);
}
if(t.getRight() != null) {
preorderNext(t.getRight(), v, prev);
}
if(prev == v) {
return t;
}
return null;
}
讲师给出了树的简单实现。该类称为 BinaryTree,如果您想创建一个节点链接到它,那么您指定左右子 BinaryTree 节点是什么。
一个节点有两个链接(一个在左边,另一个在右边子节点)并且没有到头的链接。
因此,使用当前方法,我能够成功地进行前序遍历,我通过编写存储在节点上的元素的打印语句来进行测试。
但是当我运行测试时,它告诉我来自 A 的下一个预购节点是 B,来自 K 的下一个预购节点抛出一个空异常,但应该是 I?
关于我哪里出错的任何想法?变量 prev 应该包含对访问的最后一个节点的引用,所以如果它等于节点 v(这是我指定的节点,返回 v 之后的节点),我不应该得到下一个节点吗?