查找也有前序查找、中序查找、后序查找三种方式,以中序查找为例,如果某次查找到了待查找节点直接将这个节点返回,这时候栈来到上一层,直接返回的话,如果没有找到,那就不会继续找也直接返回了,因此需要判断在下一层是否已经找到了,如果找到了那就不需要继续寻找直接返回。如果没找到还是要继续去找,使用一个临时节点来接受下一层返回的数据,如果是空的,说明没找到,继续寻找,如果不是空的,那就直接返回,对右遍历来说,也是如此,不过发现不管找没找到都要返回这个接受变量,因此直接返回即可;
代码如下:
Node infixFind(String id) {
Node result = null;
if (this.left != null) {
result = this.left.infixFind(id);
}
if (this.id.equals(id)) {
return this;
}
if (result != null) {
return result;
}
if (this.right != null) {
result = this.right.infixFind(id);
}
if (result != null) {
return result;
}
return null;
}