【问题标题】:Find and return a Node in Binary Tree Java在二叉树Java中查找并返回一个节点
【发布时间】:2016-02-25 15:23:29
【问题描述】:

您好,我正在尝试查找与参数给定的字符串相等的节点并返回该节点。我的结构是字符串的二叉树。我们假设搜索到的字符串存在。

var q 被初始化为树的根。 (在我调用方法find的函数中)

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;
} 

【问题讨论】:

  • 你有什么问题? -- 编辑:明白了。不要返回 find(q._left, con)。因为您的算法仅通过“左节点”。
  • 它不能正常工作

标签: java search tree binary-tree


【解决方案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;
} 

【讨论】:

  • 这是什么意思:!q._left? !结果?
【解决方案2】:

如果您的 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);
} 

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多