我有一个通用的二叉树。我想要做的是找到一个节点,提供一个属性来找到该节点然后返回它。 例如,我的树有对象类型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);
由于某些原因,当代码匹配时,它会继续。
答案 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;
}
答案 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;
}