2011-05-25 32 views
0

我有一个奇怪的问题关于下面的代码。我编写代码来搜索树。一棵树把两样东西放在一起!

public TreeNode<City> search(City parent, TreeNode<City> t){ 
    if (t.getCity().equals(parent)) { 
     System.out.println("ccc"); 
     return t; 
    } 
    else if (t.hasLeftChild()){ 
     System.out.println("bbb"); 
     search(parent,t.getLeftChild()); 
    } 
    else if(t.hasNextSibling()){ 
     System.out.println("aaa"); 
     search(parent,t.getNextSibling()); 
    } 
    return null; 
} 

奇怪的是:假设我的树中只有一个元素。然后,当我尝试将一个元素添加到我的树中时,该方法正常工作。但是,当有两个元素(一个父母和一个孩子),并且我搜索孩子时,屏幕上显示的是“ccc”,代码返回的内容为空!

我想没人会遇到那种愚蠢的情况。请帮帮我!

+0

这里没有足够的代码来解决这个问题。请包括语言,'TreeNode'的实现,以及你期望看到的输出。 – recursive 2011-05-25 21:50:09

回答

1

除非在第一次搜索呼叫中满足第一个(...),否则不会希望返回除null之外的任何内容,因为两个呼叫的返回值将被丢弃。

1

您应该添加return S,例如:

return search(...); 

这就是递归背后的概念;你正在调用函数并递归,但是你忽略了递归调用的结果!因为你忽略它,代码完成通过你的if报表,并继续返回null像你告诉它。