من پروژه رو تموم کردم
.
گویا راهنمایی های من بدرد کسی نخورده
! به هر حال اومدم آخرین راهنمایی ام رو بگم و برم
!
واسه اینکه بفهمین کدوم در ختا Isomorph اند، و شماره شون و اعلام کنین، فک کنم یک راه مناسب استفاده از Vector باشه
. به این ترتیب که هر درختی رو که خوندین، می اندازین تو Vector. بعدا از Vector می خونین تک تک درختا رو و اونایی که Isomorph اند رو اعلام می کنین. اینجا یه خورده گیر داره که اگر مثلا 1و4و3 Isomorph باشند، دو بار اعلام می شه
.
من برای حل این مشکل از یک لیست پیوندی مشابه Sort های کتاب استفاده کردم و هر گرهی که با گره حاضر Isomorph بود، از لیست حذف کردم (لینک قبلیش و به بعدیش وصل کردم)
.این جوری کار با سرعت بالاتری انجام می شه و لی حافظه زیادتر استفاده می شه (که فک نکنم واسه کسی مهم باشه
!!!).
اگه نظری داشتین بگین تا مهلت تحویل پروژه تموم نشده
!!!
موفق باشین
...
بابای
.
امروز پروژه رو تقریبا تموم کردم
. گفتم بیام ایده هامو باهاتون Shar کنم
.
دو قسمت پروژه به نظر سخت تر از بقیه میاد. اول حذف یک نود. برای اینکار من گفتم گرهی که می خواد حذف شه سه حالت داره:1)برگ: در این صورت فقط کافیه لینک باباش و نال کنیم
. 2)تک فرزندی:در این صورت فقط کافیه بچه اش و به باباش وصل کنیم
. 3)دو فرزندی: در این حالت Predecessor (یا Successor) اش رو پیدا می کنیم و توسط خود تابع Delete حذفش می کنیم
(چون Predecessor یا Successor تک فرزندی هستند تو حلقه بی نهایت نمی افتیم !). حالا کلید Predecessor رو به جای اون عنصری که باید حذف می شد می اندازیم
. تمومه ! (یه نکته ای که باید حواستون باشه، Root هستش که بابا نداره ...
. با یه کلک حله !!! کلک پدر خوانده
!!!!)
البته می تونستیم برگ رو هم یه حالتی از تک فرزندی بگیریم (که فرزندش ناله !!!). ولی اینجوری قشنگتره
!!!
برای فهمیدن اینکه دو تا درخت Isomorph هستند یا نه، من توصیه می کنم که از روش Recursive استفاده کنین
:
1) اگه دو تا نود برگ باشن، Isomorph اند.
2) اگه دو تا نود یک بچه داشته باشند و بچه هاشون Isomorph باشند، اون دو تا هم خودشون Isomorph اند.
3) اگه دو تا نود دو فرزندی باشند و بچه هاشون دوبدو Isomorph باشه، خودشون هم Isomorph خواهند بود.
اگه تو این روش ها گیری پیدا کردین تو رو خدا به منم بگین
.
ممنون
،موفق باشین
و بابای
.