2013-07-29 139 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。