تصف هذه المقالة طريقة Java لطباعة جميع مسارات الشجرة الثنائية. شاركه للرجوع إليه ، على النحو التالي:
سؤال:
إعطاء شجرة ثنائية وطباعة جميع المسارات.
على سبيل المثال ، بالنسبة للشجرة الثنائية التالية ، فإن جميع مساراتها هي:
8 -> 3 -> 1
8 -> 2 -> 6 -> 4
8 -> 3 -> 6 -> 7
8 -> 10 -> 14 -> 13
الأفكار:
بدءًا من عقدة الجذر ، ضع قيمتك الخاصة في صفيف ، ثم تمرير هذه الصفيف إلى عقدة طفلها. تضع عقدة الطفل أيضًا قيمتها الخاصة في هذه الصفيف ، وتنقلها إلى عقدة طفلها حتى تصبح هذه العقدة عقدة ورقة ، ثم تطبع الصفيف. لذلك ، نحن بحاجة إلى استخدام العودية هنا.
شفرة:
/** بالنظر إلى شجرة ثنائية ، يطبع كل من الجذر إلى الورق ، واحد لكل سطر. يستخدم المساعد المتكرر للقيام بالعمل.*/public void printpaths (root node ، int n) {string [] path = new string [n] ؛ printPaths (الجذر ، المسار ، 0) ؛}/** مساعد printpaths العودية-مع إعطاء عقدة ، وصفيف يحتوي على المسار من عقدة الجذر حتى ولكن ليس بما في ذلك هذه العقدة ، يطبع جميع مسارات الأوراق الجذرية. // إلحاق هذه العقدة بمسار صفيف المسار [pathlen ++] = node.value ؛ // إنها ورقة ، لذا اطبع المسار الذي أدى إلى هنا إذا (node.leftchild == null && node.rightchild == null) {printArray (path ، pathlen) ؛ } else {// خلاف ذلك جرب كلا printpaths الفرعية (node.leftchild ، path ، pathlen) ؛ printPaths (node.rightchild ، path ، pathlen) ؛ }}/** الأداة المساعدة التي تطبع السلاسل من صفيف على سطر واحد.*/private void printarray (string [] ints ، int len) {for (int i = 0 ؛ i <len ؛ i ++) {system.out.print (ints [i]+") ؛ } system.out.println () ؛}ملاحظة: يمكنك فقط استخدام صفيف + قيمة لطباعة المسار المطلوب. إذا كنت تستخدم بنية قائمة مرتبطة مثل LinkedList ، فلن تعمل. إنه يستحق تحليل الأسباب ، إنه أمر مثير للاهتمام للغاية.
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.