You are not allowed to perform this action
سوال ۹
برای ساخت و نگهداری یک درخت دودودیی (Binary Search Tree) ساختار زیر به ما داده شده است و ما اجازه نداریم در آن تغییری بهوجود بیاوریم.
1. struct node {
2. node *left, *right;
3. int value;
4. node(){
5. right = left = value = 0;
6. }
7. };
برای این ساختار کدهای زیر را با حداقل تعداد حلقه و شرط، در زیبایی کامل بنویسید.
- برای ساختار بالا عملگرهای
<و>را طوری بازتعریف کنید که بر حسب مقدارvalueی دو گره بهدرستی کار کنند. - تابع
node *insert(node *root, int x)را بنویسید که گرهای با مقدارxرا در زیر درخت به-ریشهیrootدرج کند. این عمل باید ساختار درخت را (همه نوادگان راست، ناکوچکتر و همه نوادگان چپ، نابزرگتر از ریشه) حفظ کند. - تابع
node *find(node *root, int x)را بنویسید که در زیردرخت بهریشهیroot، عنصرxرا بیابد. اگر موجود بود اشارهگری به آن گره برگرداند (اگر چند تا بود، هر کدامشان مقبول است). اگر موجود نبود هم باید 0 یا NULL برگرداند. - تابع
void delete(node *here)را بنویسید که گرهی پارامتر را حذف کند. - تابع
void print(node *root, int mode)را بنویسید که عناصر زیردرخت را در یک خط چاپ کند. برحسب این که mode برابر با صفر یا یک یا دو باشد، خروجی میبایست preorder یا inorder یا postorder باشد. تعداد دستورهای شما (با شمارش معقول و نه چپاندن!) میبایست حداقل باشد. - تابع
node *next(node *here)را بنویسید که گرهی حاوی کوچکترین عدد بزرگتر ازhere→valueرا برگرداند. در این آیتم فرض کنید اعداد همگی متفاوتند. اگرhere→valueعدد بیشینه بود باید اشاره گری به 0 (همان NULL) برگردانده شود. - تابع
bool checktree(node *root)را بنویسید که بررسی کند زیردرخت بهریشهیrootاز نظر نسبت مقادیر موجود در گرهها آیا معتبر است یا نه؟ به این معنی که آیا مقادیر گرههای درخت ساختار BST را دارند یا نه؟ - برای هر کدام از ۶ تابع بالا مشخص کنید که پارامتر اشارهگری که تابع مربوطه میگیرد، آیا میتواند
constباشد یا نه؟