繁体   English   中英

搜索二叉搜索树的顺序不正确

[英]Searching a binary search tree not in order

我有按值x排序的对象的二进制搜索树(值x较低的对象添加到左侧,而值较大的对象添加到右侧)。

它们还有一个属性y,它们分别是无序的。 我将如何搜索树中的每个节点以找到匹配项? 如果没有匹配项,我将如何返回null?

我目前拥有的代码(确实有很多缺陷,因此我要问为什么)是:

public BinaryTreeNode<E> inOrderIdSearch(BinaryTreeNode<E> n, int usrId) {
      if (n!=null) {
          inOrderIdSearch(n.getLeft(),usrId);
          if (n.getValue().getId() == usrId) {
            return n;
          }
          inOrderIdSearch(n.getRight(),usrId);
      }
      return null;
  }
public BinaryTreeNode<E> inOrderIdSearch(BinaryTreeNode<E> n, int usrId) {
  if(n==null) return null;
  int candidate=n.getValue().getId();
  if(candidate==userId) return n;

  return inOrderIdSearch(candidate>userId?n.getLeft():n.getRight(),userId);
}

假设您的树没有按照要搜索的值排序,则必须搜索每个节点,遍历的顺序无关紧要。 因此,先搜索每个节点,然后再找到其子节点。 另外,您需要返回递归调用的结果,而不是像上面那样忽略它们。

public BinaryTreeNode<E> inOrderIdSearch(BinaryTreeNode<E> n, int usrId) {
    if (n==null) {
        return null;
    }
    if (n.getValue().getId() == usrId) {
        return n;
    }
    BinaryTreeNode<E> leftResult =inOrderIdSearch(n.getLeft(),usrId);    
    if (leftResult!=null) {
        return leftResult;
    }
    BinaryTreeNode<E> rightResult = inOrderIdSearch(n.getRight(),usrId);
    if (rightResult != null) {
        return rightResult;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM