嘤嘤嘤,依旧是递归,从根节点开始分支左右树,然后进入递归
上代码:
public T search(T key) //查找并返回首次出现的关键字为key元素
{
return searchNode(root, key).data;
}
public BinaryNode<T> searchNode(T key) //查找并返回首次出现的关键字为key元素结点
{
return searchNode(root, key);
}
//在以p为根的子树中查找并返回首次出现的关键字为key元素结点,若未找到返回null,先根次序遍历
public BinaryNode<T> searchNode(BinaryNode<T> p, T key)
{
if (p==null || key==null)
return null;
if (p.data.equals(key))
return p; //查找成功,返回找到结点
BinaryNode<T> find=searchNode(p.left, key); //在左子树中查找,递归调用
if (find==null) //若在左子树中未找到
find=searchNode(p.right, key); //则继续在右子树中查找,递归调用
return find; //返回查找结果
}