2013-04-18 59 views
1

我想遍历多个列表来找到一个“目录”。 如果我有一个目录结构,如: /A/B/C搜索项目迭代通过多个列表

/A/d/F

看来,如果我找B或C的工作,但失败了d和F.我认为这是因为当它遇到一种情况时,它正在搜索一个列表并且它没有找到正确的目录,那么它不知道该返回什么(或者如果我取消注释返回NULL,它将返回null,我不会不想这样做,因为这并不意味着它没有技术上的发现)。

I.E.如果我搜索F,它将搜索A/B/C并且不知道要返回什么。

有没有办法阻止返回值,直到它找到一个目录或直到完成查找?

Directory* search_tree_for_dir(string dir_name) { 
      for(list<Directory*>::iterator iter = this->l_dir.begin(); iter != this->l_dir.end(); iter++) { 
        // Base case: if directory found then return 
        if((*iter)->name == dir_name){ 
         return *iter; 
        } 
        if(*iter != NULL) { 
         return (*iter)->search_tree_for_dir(dir_name); 
        } 
       } 
       //return NULL; 
      } 
+0

一个简单的方法来做到这一点将是查找树遍历像后序遍历。链接:http://en.wikipedia.org/wiki/Tree_traversal#Post-order –

回答

2

你想要做的是检查递归调用的返回值,并查看它返回的值。例如:

Directory *ret = (*iter)->search_tree_for_dir(dir_name); 
if (ret) { 
    return ret; 
} 

这样一来,如果递归调用返回比NULL其他的东西,你会把它。如果它没有找到任何东西(即它返回NULL),那么你不会传递它,并继续搜索。