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