我是C++的新手。有什麼方法可以從樹中開始遍歷所有父節點嗎?如何在C++中遍歷treeview控件的所有父節點?
例:
ParentNode1->Child1
->Child2
ParentNode2->Child1
->Child2
我想重複從ParentNode1到ParentNode2。
請提出建議。
我是C++的新手。有什麼方法可以從樹中開始遍歷所有父節點嗎?如何在C++中遍歷treeview控件的所有父節點?
例:
ParentNode1->Child1
->Child2
ParentNode2->Child1
->Child2
我想重複從ParentNode1到ParentNode2。
請提出建議。
使用以下函數來遍歷MFC CTreeCtrl
:
void TraverseTree(CTreeCtrl* pTreeCtrl)
{
TraverseTreeBranch(pTreeCtrl, pTreeCtrl->GetRootItem(), TVI_ROOT);
}
void TraverseTreeBranch(CTreeCtrl* pTreeCtrl, HTREEITEM hItem, HTREEITEM hParentItem)
{
// Do stuff with hItem here
HTREEITEM hItemTmp = pTreeCtrl->GetChildItem(hItem);
while(hItemTmp != NULL)
{
TraverseTreeBranch(pTreeCtrl, hItemTmp, hNewItem);
hItemTmp = GetNextSiblingItem(hItemTmp);
}
}
CTreeView類包裝CTreeCtrl對象。後者提供CTreeCtrl::GetNextSiblingItem/CTreeCtrl::GetPrevSiblingItem。這些成員返回下一個/上一個樹形視圖項目,這是在同一個層次上。
的代碼在這個答案沒有解決的問題。如所實施的,它訪問**所有**節點。由於它實現了深度優先迭代(相對於寬度優先),同一級別上的節點迭代與遞歸調用混合在一起,並且難以按照需要進行循環。如果你去掉所有不相關的代碼並且只顯示一個簡單的'TraverseSiblings'函數,它會給出更好的答案。 – IInspectable