سلام
با توضیحاتی که داده بودید، یک نمونه ساده حاضر کردم، نمیدانم چقدر به چیزی که میخواهید شبیه است.
نمونه دو کلاس با نام CNode و CArrayList دارد.
هر گره میتواند شامل تعداد نامحدودی زیر گره باشد که به صورت پیوندی نگاه داشته میشود.
یعنی هر گره یک پیوند از گره والد و یک پیوند از اولین گره فرزند و یک پیوند از گره بعدی خودش در لیست والد دارد.
متد Insert هم وجود دارد که اگر آرگومان index صفر داده شود در اول گره و اگر هم 0x7fffffff داده شود در آخر گره میتواند Insert کند و در محل خاص و مشخص هم که میتواند Insert کند.
اپراتور [] هم باز تعریف شده تا در هر گره بتوانید با ایندکس به زیر گره هایش دسترسی داشته باشید، همچنان از 0x7fffffff میتوانید برای دسترسی به آخرین گره استفاده کنید.
=====
خود کلاس CNode مجهز به متدی به نام RefreshFarList است که میتواند لیست گره های غیر مجاور برای همه گره ها تولید و refresh کند و در متغییر m_NFar نگاه دارد.
برای ذخیره لیست گره های غیر مجاور از CArrayList به جای لیست پیوندی استفاده است.
(اگر لیست گره های غیر مجاور هم با لیست پیوندی انجام میشد کلاس CArrayList هم نیازی نبود ولی اینطوری به نظرم بهتر و پربازده تر است)
میتوان مجدد گره های جدید را در محل های دلخواه درج (Insert) کرد و در نهایت با اجرای متد RefreshFarList از یکی از گره ها، لیست گره های غیر مجاور همه درخت بازتولید و refresh میشود.
=====
لازم به ذکر است که من تاپیک را درست مطالعه نکردم و فقط با توضیحات خودتان این را نوشتم و نمیدانم چقدر به چیزی که میخواستید نزدیک است.
شاید نیاز نباشد بگویم که کدها با VC++2008 نوشته و تست شده اند، هم کامپایل بدون خطا و هشدار انجام شده و هم تست عملی با 5 گره تو در تو نمونه درست جواب داد.
=====
کد به راحتی قابل تبدیل به C#.Net و VB.Net است و اگر دوستان تمایل داشتند و وقت داشتم میتوانم نمونه دقیقاً مشابه این دو زبان را هم قرار دهم.
موفق باشید.