Java:手动二叉树

时间:2013-05-27 00:58:52

标签: java binary-tree preorder

我的数据结构类中有一个赋值,我们必须手动构建一个总共7个节点的二叉树,并在前序遍历中显示每个节点中的数据。根节点有2个孩子,这2个孩子中的每个孩子都有2个孩子。我已经达到了将整个左侧创建到第一棵树的末尾的程度,但是一旦我创建了第一个右子,我就会陷入Null Pointer Exception。我搜索过类似的其他项目,我似乎还无法找出这段代码的问题。我发现创建树的代码比我们分配的要好得多,但我们在课堂上限制手动创建左右子项。任何外部视角来帮助创建可能是一个简单的程序,我们将非常感激!

public class Main {

public static void main(String[] args) {

    Node a = new Node(1);
    Node b = new Node(2);
    Node c = new Node(3);
    Node d = new Node(4);
    Node e = new Node(5);
    Node f = new Node(6);
    Node g = new Node(7);
    BinaryTree t = new BinaryTree(a);

    t.addleft(a);
    t.addleft(b);
    t.addleft(c);
    t.addParent();
    t.addRight(d);
    t.addParent();
    //t.addParent();
    //t.addRight(e);
    //t.addleft(f);
    //t.addParent();
    //t.addRight(g);


    //System.out.println(n.getData());          

    t.preOrder(t.root);
}

}

public class BinaryTree {
Node root;
Node current;

public BinaryTree(Node n){
    root = n;
    n.setParent(current);
    current = n;
}

public void addleft(Node n){    
    current.setLeft(n);
    current = n;        
}

public void addRight(Node n){   
    current.setRight(n);
    current = n;        
}

public void addParent(){
    current = current.getParent();
}

public void preOrder(Node n){
    if(n != null){
        System.out.println(n.getData());
        preOrder(n.leftChild);
        preOrder(n.rightChild);
        return;
    }
    return;

}

}

public class Node {
Node parent;
Node rightChild;
Node leftChild;
int data;

public Node(int i) {
    data = i;
    parent = null;
    rightChild = null;
    leftChild = null;
}

public int getData() {
    return data;
}

public Node getParent() {
    return parent;
}

public void setParent(Node aParent) {
    parent = aParent;
}

public Node getLeft() {
    return leftChild;
}

public void setLeft(Node left) {
    leftChild = left;
}

public void setRight(Node right) {
    rightChild = right;
}

public Node getRight() {
    return rightChild;
}
}

1 个答案:

答案 0 :(得分:1)

这是因为当您创建以节点a为根的二进制树时,c没有父节点。

致电时

t.addParent();
t.addRight(d);

第一行将current设置为null,然后第二行尝试使用null值。