Java 在树中搜索某个值

Java 在树中搜索某个值,java,Java,我需要帮助用int数据搜索二叉树(不一定是二叉搜索树),看看树中是否有元素。如果在树中,则返回引用;如果未找到,则返回null。这是我目前掌握的代码 Node search(TreeNode root, int key){ if(root == null){ return null; } search(root.left, key); search(root.right, key); if(root.right.data === key || root.l

我需要帮助用int数据搜索二叉树(不一定是二叉搜索树),看看树中是否有元素。如果在树中,则返回引用;如果未找到,则返回null。这是我目前掌握的代码

Node search(TreeNode root, int key){
  if(root == null){
    return null;
    }  
   search(root.left, key);
   search(root.right, key); 

if(root.right.data === key || root.left.data == key){
     return root;
   }else{ 
      return null;
   }
}
您可以调用
search(root.left,key)。那太好了。除非您正在搜索的元素确实位于当前节点的左分支中,否则不会发生任何事情。无论递归调用报告了什么,该方法都会继续执行。您需要保留这些数据并进行适当的处理

因此,您应该这样做:

Node search(TreeNode root, int key){
    if (root == null)
        return null;

    if (root.data == key)
        return root;

    Node n;

    n = search(root.left, key);
    if (n != null)
        return n;

    n = search(root.right, key);
    if (n != null)
        return n;

    return null;
}

这里有什么问题?@tymo-什么?你没有猜问题的魔力吗?代码正确吗?这段代码还会检查根节点,看它是否与密钥相同?@Trojan.ZBOT虽然情况很明显,但OP必须能够清楚地表达问题,以便将来提问。对于误解,我很抱歉,我只是对递归感到困惑,我想确保这是一种正确的方法,如果找到了一个节点,就发回它。非常感谢你,好先生!因此,无论何时返回,我们都必须将数据保存在变量中?我不会使用“ever”一词,因为它太笼统了。对于这个特定的算法,您应该保存函数的返回值,因为这是一个很好的“策略”。我建议您在编写实际代码之前,先计划好“策略”,在纸上解决问题。至少在开始的时候。为什么我们在方法的末尾返回null,我认为在我们到达基本情况时已经这样做了考虑
存在的情况,但是它的
数据
不等于
,并且它没有子项。