如何在具有空值的二进制搜索树中搜索对?

时间:2019-05-04 22:13:00

标签: java nullpointerexception binary-search-tree

我有一棵树,里面有3种信息。每个节点都是一个Pair<String, Float>

  • 具有数字值的要素,具有字符串值和浮点值。 (s,float)
  • 具有布尔值的特征,该特征具有字符串值和空值(s,null)
  • 决策,具有字符串值和空值 (s,null)

我需要用树中的所有决策填充list<String>

判断该决定是否成立的方法是该特定决定的leftNoderightNode为空,树看起来像这样:

                                    Feature(s,3)
                ------------------/               \------------------
          Feature(s,2)                                       Feature(s,1)
      -------/       \---------                   ----------/       \------
Feature(s,null)      Decision(s,null)      Decision(s,null)   Decision(s,null)                     
-----/      \---
D(s,null)   D(s,null)

我尝试过一种递归方法来遍历树,直到返回列表为止,但是我不确定如何停止该方法。我什么时候可以返回列表?

制作树的代码

private void addTreeNode(TreeNode element, TreeNode currentRoot) {

    if (currentRoot.equals(null)) {
        currentRoot = element;
    }
    if (root.leftNode == null) {
        root.leftNode = element;
    } else if (root.rightNode == null) {
        root.rightNode = element;
    } else {
        if (root.leftNode.leftNode == null || root.leftNode.rightNode == null) {
            currentRoot = root.leftNode;
            addTreeNode(element, currentRoot);
        } else {
            currentRoot = root.rightNode;
            addTreeNode(element, currentRoot);
        }
    }
}

public List<String> getDecisions() {
    List<String> array = new ArrayList();

    return getDecisionsAux(root, array);
}

private List<String> getDecisionsAux(TreeNode root, List<String> array) {

    if (root.leftNode == null && root.rightNode == null && root != null) {
        array.add(root.data.first());
    }
    if (root != null) {
        getDecisionsAux(root.leftNode, array);
        getDecisionsAux(root.rightNode, array);
    }
    return array;
}

使用此代码,我得到一个NullPointerException,但不确定为什么。有人可以帮忙吗?

0 个答案:

没有答案