View Full Version : الگوریتم محاسبه تعداد برگ ها و سطح های یک درخت دودویی به زبان C
13601360
پنج شنبه 27 دی 1386, 21:01 عصر
اگر امکان دارد الگوریتم شمارش تعداد برگ و سطح و گره های داخلی یک درخت دودویی را که به زبان C باشد را برایم بگذارید ممنون می شوم
Mbt925
جمعه 28 دی 1386, 16:23 عصر
دوست عزیز این سوالی که پرسیدین سوال درستی نیست .
جواب این سوال به نحوه ذخیره و پیاده سازی درختتون بستگی داره.
whitehat
جمعه 28 دی 1386, 18:14 عصر
دوست عزیز این سوالی که پرسیدین سوال درستی نیست .
جواب این سوال به نحوه ذخیره و پیاده سازی درختتون بستگی داره.وقتی درخت دودویی باشه ، نحوه قرار گیری فکر نکنم تاثیر خاصی داشته باشه
اگر امکان دارد الگوریتم شمارش تعداد برگ و سطح و گره های داخلی یک درخت دودویی را که به زبان C باشد را برایم بگذارید ممنون می شومدوست عزیز الگوریتم را با زبان خاصی نمی نویسند!
برای شمارش برگها از یک تابع بازگشتی می توان استفاده کرد که مثلا پیمایش inorder درخت را انجام دهد و در حین پیمایش برگها را شمارش کرد(نودی که فرزندی ندارد)
برای شمارش سطحها هم ،همین روش جوابگو است ، باید متغیری برای سطح ماکزیمم بگیرید، البته روش های دیگری هم وجود دارد، با کمی جستجو در همین بخش روش محاسبه سطح را می توانید پیدا کنید
13601360
جمعه 28 دی 1386, 20:20 عصر
منظورم پیاده سازی درخت دودویی با اشاره گر است
whitehat
جمعه 28 دی 1386, 22:06 عصر
منظورم پیاده سازی درخت دودویی با اشاره گر استدوست عزیز الگوریتم ها مستقل از ساختمان داده و پیاده سازی طراحی می شوند.
شما ابتدا باید الگوریتم را طراحی کنید سپس آنرا به دلخواه خود پیاده سازی کنید. برای مسئله ای که عنوان کردید شما باید یکی از پیمایش های درخت را بکار ببرید، حال اینکه چه ساختمان داده ای بکار می برید با شما است. اگر درباره خود الگوریتم سوال دارید بپرسید ولی اگر در مورد پیاده سازی با زبان C مشکل دارید باید سوال خود را در بخش برنامه نویسی C بپرسید
موفق باشید
Mbt925
شنبه 29 دی 1386, 10:17 صبح
وقتی درخت دودویی باشه ، نحوه قرار گیری فکر نکنم تاثیر خاصی داشته باشه
دوست عزیز متوجه منظورتون هستم ، ولی من فکر می کنم دوستمون الگوریتم لازم نداره ونیازمند پیاده سازیه.
برای همین اون سوال رو پرسیدم.
13601360
یک شنبه 30 دی 1386, 20:17 عصر
من مشکل ام پیاده سازی الگوریتم مورد نظر به زبان C است
mehdi5106
یک شنبه 30 دی 1386, 20:40 عصر
این توابعش ببین به دردت میخوره...
تعداد گره ها:
int noden(tree *node)
{
tree *tnode=node;
if(tnode!=0)
{
if((tnode->left==0)&&(tnode->right==0))
return 1;
else
return(noden(tnode->left)+noden(tnode->right)+1);
}
return 0;
}
تعداد برگها:
int leaf(tree *node)
{
tree *tnode=node;
if(tnode!=0)
{
if((tnode->left==0)&&(tnode->right==0))
return 1;
else
return(leaf(tnode->left)+leaf(tnode->right));
}
return 0;
}
ارتفاع درخت:
int depth(tree *node)
{
int l,r;
tree *tnode=node;
if(tnode!=0)
{
l=depth(tnode->left);
r=depth(tnode->right);
if(l>r)
return l+1;
else
return r+1;
}
return 0;
}
crystallady
شنبه 28 دی 1387, 10:35 صبح
:عصبانی++::عصبانی++:
وقتی درخت دودویی باشه ، نحوه قرار گیری فکر نکنم تاثیر خاصی داشته باشه
شمارش تعداد سطح در درخت
دوست عزیز الگوریتم را با زبان خاصی نمی نویسند!
برای شمارش برگها از یک تابع بازگشتی می توان استفاده کرد که مثلا پیمایش inorder درخت را انجام دهد و در حین پیمایش برگها را شمارش کرد(نودی که فرزندی ندارد)
برای شمارش سطحها هم ،همین روش جوابگو است ، باید متغیری برای سطح ماکزیمم بگیرید، البته روش های دیگری هم وجود دارد، با کمی جستجو در همین بخش روش محاسبه سطح را می توانید پیدا کنید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.