二叉树遍历中的空指针



>我已经设法设置了一个二叉树,并且可以在插入节点时打印内容。但是,当我使用一种方法遍历树时,我可以创建一个遍历,生成多个单个 arrayLists,但是当我尝试使用遍历填充单个 arrayList 时,我得到一个 NullPointerException,我不确定为什么。

有效的原件。

    @Override
public List<T> traverse() {
    List<T> traversal = new ArrayList<T>();
    populateTraversalList(this,traversal);
    if (this.isEmpty()) {
        return null;
    } else {
        traversal.add(this.getValue());
        root.getLeft().traverse();
        root.getRight().traverse();
    }
    System.out.println(traversal.toString());
    return traversal;
}

生成输出。当给定一个由 {0, 1, 2, 4, 3, 5, 6, 7} 数组生成的整数二叉树时。

[3]
[7]
[6]
[5]
[4]
[2]
[1]
[0]

但是当我试图把它整理起来时,它会得到空。

 @Override
public List<T> traverse() {
    List<T> traversal = new ArrayList<T>();
    populateTraversalList(this,traversal);
    System.out.println(traversal.toString());
    return traversal;
}
private void populateTraversalList(BinaryTree<T> searchTree, List<T> traversalList) {
    if (this.isEmpty()) {
        return;
    } else {
        traversalList.add(getValue());
        populateTraversalList((BinaryTree<T>) searchTree.getLeft(), traversalList);
        populateTraversalList((BinaryTree<T>) searchTree.getRight(), traversalList);
    }
}

它似乎特别反对 searchTree.getLeft() 行,但根据我的理解,我应该将相同的实例传递到第一个参数中。提前谢谢你。

修复了错误。将 this.isEmpty() 更改为 searchTree.isEmpty(),检查正在处理的 searchTree。以前是检查"this",这是一个空Ptr。仍然有问题,但至少它正在生产一些东西。坚持太久了。

谢谢

最新更新