递归二叉树的节点类

时间:2015-06-17 03:12:30

标签: java recursion tree binary-tree depth-first-search

我已成功编写了一种方法来打印以给定节点为根的子树中的所有节点的值(下面粘贴在“工作代码”标签下的代码)。但是,这个printTree方法在Main类中(而不是在Node类本身中)。我想知道是否有可能(和理想?)重写代码,以便printTree方法在Node类本身?我的尝试如下(代码粘贴在标签“非工作代码”下面),但它抛出了空指针异常。谢谢!

工作代码:

public class Node {

    int value;
    Node left;
    Node right;

    public Node(int value, Node left, Node right)
    {
        this.value = value;
        this.left = left;
        this.right = right;
    }
}

public class Main {


    public static void printTree(Node current)
    {

        if (current != null)
        {
            System.out.println(current.value);
            printTree(current.left);
            printTree(current.right);
        }

        return;
    }


    public static void main(String[] args) {
    // write your code here

        Node a = new Node(3, new Node(4, null, null), new Node(5, null, null));

        printTree(a);

    }
}

非工作代码(在Node类中):

public void printTree()
{
    Node current = this;

    if (current != null)
    {
        System.out.println(current.value);
        current.left.printTree();
        current.right.printTree();
    }

    return;
}

1 个答案:

答案 0 :(得分:1)

问题不在Node current = this;行。但是在

current.left.printTree();
current.right.printTree();

行。

因为即使current不为null,current.left或current.right也可以为null。而您正试图在空对象上调用printTree()

<强>修正:

if (current != null)
{
    System.out.println(current.value);
    if (current.left != null)
        current.left.printTree();
    if (current.right != null)
        current.right.printTree();
}