2013-07-29 109 views
0

我已经使用NSTreeNode创建了一个文件和文件夹的目录树结构,我在NSOutlineView中显示。我的问题是一些文件夹是空的,我想从显示中删除这些文件夹。我已经递归地尝试遍历树结构的每个元素来移除元素,但构建树显然比撕下元素容易得多。我的迭代已经开始于根,然后遍历每个节点的childnodes,直到我到达树的顶部。但是,由于某些文件夹可能包含多个空文件夹和非空文件夹,因此难以高效地移除我不确定的元素。仅仅因为一个文件夹只包含另一个文件夹并不意味着我可以删除它,因为子文件夹可能是空的或包含文件。递归删除树目录结构中的空项目

我想我需要找到树的顶部元素/目录,然后通过父节点的所有父节点向后迭代到我的根节点,并检查每个文件夹是否为空。如果文件夹为空或仅包含我当前所在的文件夹,请删除文件夹和父文件夹,依此类推,直至达到根目录。

但是,我无法得到这个工作。有没有人有办法找到定义树顶部的元素?还是有一种很好的方法来排序/删除NSTreeNode结构中的空元素?

我很感激所有我能得到的帮助。谢谢。欢呼声,特朗德

+0

我认为你只需要遍历到每个分支的末尾,如果最后一个文件夹是空的删除它,然后递归地向上移动树删除空的文件夹,并离开... – trueinViso

回答

1

在伪码:

BOOL removeTheChildless(NSTreeNode *tree) 
{ 
    for each NSTreeNode *child 
    { 
     if (removeTheChildless(child)) 
      removeChild child from tree 
    } 

    return tree.isLeaf; 
} 

的 “针对每个” 可以基于mutableChildNodes。 HTH。