public void traverse(ListItem root) {
//preorder traversal - going to left childs first
ListItem focusNode;
ListItem parentNode;
if (root == null) {
System.out.println("Empty tree");
} else {
if (root.leftLink != null) {
System.out.println(root.getValue());
parentNode = root;
while (parentNode.leftLink != null) {
focusNode = parentNode.leftLink;
System.out.println(focusNode.getValue());
parentNode = focusNode.leftLink;
}
}
}
}
所以这就是我到目前为止所得到的。我认为这能够打印出树左下方的所有节点,但我还没有找到一种方法,因为缺少更好的术语跳回到以前的条目并测试是否有左节点,如果没有转到正确的节点。
答案 0 :(得分:1)
使用递归你可以这样做:
public void traverse(ListItem node) {
if (node== null) {
System.out.println("Empty tree");
} else {
if (node.leftLink != null) {
traverse( node.leftLink );
}
if (node.rightLink != null) {
traverse( node.rightLink );
}
System.out.println( node.getValue());
}
}
这将检查左子项是否存在并递归调用左子树(子)的方法,然后对右子项执行相同操作。打印完所有子项后,将打印节点自己的值。
示例:
假设以下树
A
/ \
B C
/ \ \
D E F
调用traverse(A)
将导致后续输出:
D
E
B
F
C
A