如何使用对象的属性在二叉树中查找节点

时间:2017-04-27 00:28:37

标签: java

我有一个通用的二叉树。我想要做的是找到一个节点,提供一个属性来找到该节点然后返回它。 例如,我的树有对象类型X,X有一个属性代码,所以我必须将当前节点的代码与提供的代码进行比较。

private X find_X_by_code(Node<X> node, String code) {
    if (!node.element.code().equals(code)){
        if (node.left != null){
            find_X_by_code(node.left,code);
        }
        if (node.right != null){
            find_X_by_code(node.right,code);
        }
    }
    return node.element;
}

我这样称呼这个方法:

find_X_by_code(root,code);

由于某些原因,当代码匹配时,它会继续。

2 个答案:

答案 0 :(得分:0)

根据您的使用情况,您可能需要稍微调整一下。

if(node != null){
    if(node.element.code().equals(code)){
       return node.element;
    } else {
        Node tempNode = find_X_by_code(node.left, code);
        if(tempNode == null) {
            tempNode = find_X_by_code(node.right, code);
        }
        return tempNode.element;
     }
} else {
    return null;
}

How to search for a node in a tree and return it?

答案 1 :(得分:0)

您错过了递归调用中的返回值以及节点不存在时的句柄(达到null)。将其更改为:

private X find_X_by_code(Node<X> node, String code) {
    if (node == null) { return null; }
    if (!node.element.code().equals(code)){
        if (node.left != null){
            return find_X_by_code(node.left,code);
        }
        if (node.right != null){
            return find_X_by_code(node.right,code);
        }
    }
    return node.element;

}