PDA

View Full Version : کمک در مورد الگوریتم پیمایش ساختار درختی



shahab_ksh
سه شنبه 01 آبان 1386, 15:56 عصر
کسی میتونه الگوریتم یه ساختار درختی رو برام توضیح بده

فرض کنید مثل دایرکتوری های یه درایو البته این مثاله درمورد و مورد من یه بانک اطلاعاتی که
سه فیلد داره

چه الگوریتمی رو برای پیماش پیشنهاد میکنید لطفا تفسیر کنید


http://www.uploadgeek.com/uploads456/1/piv.jpg

h_baqery
چهارشنبه 02 آبان 1386, 17:17 عصر
برای اینکار معمولا از دو جدول استفاده می کنند . مشکلی که این حالت داره اینه که اگر یک شاخه بخواد توی دو تا parent باشه باید اسمش رو دوباره توی جدول به عنوان یه رکورد مجزا با همون ID بیاری.

salmanmp
پنج شنبه 03 آبان 1386, 08:38 صبح
راحت ترین کار اینه که یه جدول با 4 فیلد داشته باشی واسه خود درخت و یک جدول هم واسه اطلاعات تکمیلی node های درخت !
جدول اول شامل:
1- ID
2- Name
3- Parent
4-Level
فیلد parent واسه هر کسی ID مربوط به پدرشه
فیلد Level سطح رو مشخص میکنه و به این درد می خوره که مثلاً وقتی می خوای توی یه TreeView بریزیش مطمئنی که قبلاً پدرش رو Add کردی ! (این کار رو این شکلی انجام می دی که وقتی داری می خونی از جدول با Level سورت می کنی)

اگر الگوریتم پیمایش می خوای بزنی دیگه Level رو لازم نداری؛ اونوقت یه کوئری خواهی داشت برای پیدا کردن node هایی که باباشون @Parent هست !
بعد یه صف (Queue) می سازی و اول root رو توش Add می کنی و بعدش تا موقعی که صفت خالی نشده یکی از صفت بر میداری و اون کوئری رو با اون پارامتر صدا می کنی و همه ی جواب ها رو تو صف Add می کنی ! اینجوری درختتو Level By Level می سازی !


مشکلی که این حالت داره اینه که اگر یک شاخه بخواد توی دو تا parent باشه باید اسمش رو دوباره توی جدول به عنوان یه رکورد مجزا با همون ID بیاری.
تعریف درخت : گرافی که بین هر دو راس آن فقط یک مسیر وجود دارد :)

mhadvi_mahmaood
پنج شنبه 03 آبان 1386, 18:24 عصر
به نظرم فیلد سطح اضافی است چون تو SQl server 2005 با استفاده از cte میشه مشخص کرد که نود های کدام سطح نمایش داده بشوند

shahab_ksh
شنبه 05 آبان 1386, 00:53 صبح
ممنون از همه دوستان برای پیمایش و Bind کردن به کنترل منو ASP.NET میخاسم راهش استفاده از XSLT بود به عنوان واسط بین بانک اطلاعاتی و کنترل

salmanmp
یک شنبه 06 آبان 1386, 08:05 صبح
به نظرم فیلد سطح اضافی است چون تو SQl server 2005 با استفاده از cte میشه مشخص کرد که نود های کدام سطح نمایش داده بشوند
فکر کنم اونی که من گفتم بار اضافی رو سرور نمی ذاره ولی مشتاقم در مورد CTE بیش تر بدونم :)