在二叉树Java中查找并返回一个节点

时间:2016-02-25 15:23:29

标签: java search tree binary-tree

您好我试图找到一个等于由parametres给出的字符串的节点并返回该节点。我的结构是字符串的二叉树。我们假设搜索的字符串存在。

var q被赋予树的根。 (在我称之为方法查找的函数中)

private NodeTree find(NodeTree q, String cont){
   if(q._contingut.equals(cont)) return q;
   else {
       if(q._left!=null) return find(q._left,cont);
       else if(q._right!=null)return find(q._right,cont);
   }
   return null;
} 

2 个答案:

答案 0 :(得分:1)

在find()函数的第4行中,您不应该返回左子树上的递归调用的结果。相反,如果从左子树中获得“NULL”,则应该在正确的子树中搜索字符串。

这是更新后的代码

private NodeTree find(NodeTree q, String cont){
   if(q==NULL) return NULL;
   if(q._contingut.equals(cont)) return q;

   NodeTree result = NULL;
   if(!q._left) result = find(q._left,cont);
   if(!result && q._right) result = find(q._right,cont);
   return result;
} 

答案 1 :(得分:0)

如果您的BST构建正确,您需要决定将当前节点值与查询值进行比较的位置(左侧或右侧子树),例如:

NodeTree find(NodeTree q, String query) {
   if(q.value.equals(query)) 
       return q;
   else if (q.value.compareTo(query) > 0) 
       return q.left == null ? null : find(q.left, query);
   else
       return q.right == null ? null : find(q.right, query);
}