无法弄清前序遍历

时间:2016-02-17 13:50:13

标签: java

 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;
                }
            }
        }
    }

所以这就是我到目前为止所得到的。我认为这能够打印出树左下方的所有节点,但我还没有找到一种方法,因为缺少更好的术语跳回到以前的条目并测试是否有左节点,如果没有转到正确的节点。

1 个答案:

答案 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