سلام دوست عزیز ،
شما مشخص نکردین نوع Traverse چجوری باشه ، چون در درخت های باینری چند نوع پیمایش داریم ،
اما برای اینکه موضوع سخت نشه و کار به الگوریتم و ریاضی کشیده نشه اول شما باید TreeView رو پیمایش کنین :
private void PrintRecursive(TreeNode treeNode)
{
MessageBox.Show(treeNode.Text);
foreach (TreeNode tn in treeNode.Nodes)
{
PrintRecursive(tn);
}
}
private void CallRecursive(TreeView treeView)
{
TreeNodeCollection nodes = treeView.Nodes;
foreach (TreeNode n in nodes)
{
PrintRecursive(n);
}
}
ضمنا دوستانی که نظرشون این هست که توابع بازگشتی پیچیده هستند حق با اوناست ولی در مواردی خاص مثل اینجا تقریبا چاره ای نیست ، مگر اینکه بخواین خودتونو الکی درگیر لیست ها و سایز TreeView و موارد اینجوری کنین که کدتون بیشتر پیچیده و زیاد میشه و صد البته با خطاها احتمالی بیشتر.
شما در خصوص پیمایش تست کنین اگر نتیجه بخش بود در خصوص ذخیره در بانک اطلاعاتی هم با هم فکری خواهیم کرد.
** توجه کنین اگر چند هزار نود دارین پیشنهاد میکنم تابع MessageBox رو جایگزین کنین ، چون هیچکس دوست نداره هزاران MessageBox سمج روی صفحش ظاهر بشه که نمیذارن حتی دکمه Stop Debug رو بزنین !!
*** آپدیت :
درخصوص نحوه کارش شما شی TreeView رو به عنوان آرگومان پاس میدین به تابع CallRecursive ، اون میاد تمام نود ها رو در یک کالکشن ذخیره میکنه ( البته نگران حافظه نباشین اینا در حافظه رم فقط Link میگیرن ، Copy نمیشن)
بعد از اون یه حلقه foreach میاد تمام اون کالکشن نود ها رو پیمایش میکنه و با هر بار پیمایش تایع PrintRecursive رو فراخوانی میکنه.
در تایع PrintRecursive هم یک حلقه دیگه تمام نود های زیر مجموعشو صدا میزنه و باز هم برای هر کدوم خود تابع رو صدا میزنه و دوباره روز از نو ، روزی از نو !
انقدر این تابع خودشو رو صدا میرنن و نود ها به شکل Parent/Child به عنوان آرگومان پاس داده میشن تا تموم بشن !!