يبدو أن المشكلة تكمن في الطريقة التي تتعامل بها مع العقدة الجذرية root
في الدالة print()
بداخل فئة tree
. في دالة arrange()
، تبدو عملية ترتيب العقد معتمدة على تعيين العقدة الجذرية root
بشكل صحيح وتحديث العقد الحالي r
بشكل مناسب. لكن في دالة print()
، يجب عليك التأكد من أن العقدة التي تريد طباعتها ليست فارغة قبل طباعة قيمتها.
في الحالة الحالية، تستخدم دالة print()
لطباعة r.rnode.data
مباشرة، دون التحقق من قيمة r.rnode
إذا كانت null
أم لا. هذا يؤدي إلى حدوث استثناء الإشارة إلى مؤشر null
عندما تكون r.rnode
فارغة.
لحل هذه المشكلة، يمكنك تحديث دالة print()
لتتحقق أولاً من وجود العقدة r.rnode
قبل طباعة قيمتها. يمكنك استخدام الشرط التالي:
javapublic void print(Node r)
{
if (r.rnode != null) {
System.out.println(r.rnode.data);
}
}
بهذا التحديث، ستتجنب استثناء الإشارة إلى مؤشر null
وستضمن طباعة قيمة العقدة r.rnode
فقط إذا كانت غير فارغة.
المزيد من المعلومات
يمكنك أيضًا تحسين طريقة تنظيم العقد وطباعتها في فئة tree
لضمان عدم حدوث أي استثناءات. على سبيل المثال، يمكنك استخدام تقنية معينة مثل الطباعة بشكل متسلسل للقيام بذلك.
هناك بعض النصائح التي يمكن أن تفيدك:
-
استخدام الطباعة المتسلسلة: يمكنك استخدام الطباعة المتسلسلة لطباعة قيم العقد بترتيب صحيح. يمكنك القيام بذلك بواسطة دالة تسلسلية تقوم بزيارة العقد بترتيب صحيح، مثل الطباعة بالترتيب الجذري أو بالترتيب الانتقالي أو بالترتيب الختامي.
-
التحقق من العقد الفارغ: تأكد من تحققك من العقدة الحالية قبل الوصول إلى العقدة التالية. يمكنك استخدام التحقق من العقدة الفارغة في الدوال الخاصة بتنظيم وطباعة العقد لتجنب الوصول إلى عقد فارغ.
-
تنظيم العقد بشكل صحيح: تأكد من أن تنظيم العقد يتم بشكل صحيح لتجنب مشاكل الوصول إلى عقد غير مبني بشكل صحيح.
باستخدام هذه النصائح، يمكنك تحسين فئة tree
لتعمل بشكل أفضل وتقليل احتمال حدوث استثناءات.