الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Binary Search Tree(BST)

بدأه خادمة الإسلام في 5 ديسمبر 2012 · 6 رد · 1,030 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أود أن أسأل المبرمجين سؤال في تراكيب البيانات باستخدام الجافا

السؤال هو أنني احتاج كود باستخدام الـ Binary Search Tree ويكون في هذا الكود الميثودات التالية:-

1). ميثود يجد أعداد النودات في الـ Tree

---public static int size()

2). ميثود يجد أعداد الـ internal nodes

---public static int Internal_ size()

3). ميثود يجد أعداد لـ external nodes

---public static int External_ size()

4). ميثود يجد أعداد الـ nodes التي لها two children

---public static twoChildren_ size()

5). ميثود تجد أعداد الـ nodes لتي لها one children

---public static oneChildren_ size()

6). ميثود أمرر لها رقمين يطبعهما ويطبع الأرقام يللي بينهم

public static void PrintRange(int x, int y)

7). ميثود أمرر له رقم ويرجع لي ان هذا الرقع في مستوي كذا.

على سبيل المثال مررت للميثود رقم 65 فالبرنامج يرجع لي ان هذا الررقم في المستوى الثاني

public static int nodeLevel(int x)

8). ميثود أمرر له رقمين ويرجع لي الـ paht length يللي بينهم

على سبيل المثال مررت الرقم 87 والرقم 55 فمثلاً المسافة بين الرقمين 5 خطوات فيطبع لي 5

public static void Printpath(int x, int y)

9). ميثود يطبع لي أمرر له رقمين يطبع لي أقرب أب يلتقوا فيه الرقمين --------->Lowest Common Ancestor(LCA)l

على سبيل المثال مررت 87 والرقم 77 فإن أقرب أب يلتقون فيه هو الرقم 80 فيطبع لي الرقم 80

public static void Printpath(int x, int y)

ملاحظة :- هذا البرنامج يدرج الـ nodes في الـ main program

البرنامج يقرأ مجموعة من الـ nodes من ملف

تنسيق الملف كما يلي:-

1

30

10

15

7

.

.

.

.

5

115

99

8

إذا استطعتم كتابة كود لرسم الـ Binary tree يعني الناتج يطلع لي مع رسمة للـ Binary tree

الرجاء الحار اريده جاهزاً يوم السبت 8/12/2012

#2

السلام عليكم

أهلا بك أختي الكريمة

للأسف موضوعك مخالف لقوانين المنتدى لأنه يُمنع حل الواجبات, عليك بإدراج محاولتك للسؤال.

أرجو لك التوفيق.

#3
Sn@CkeR كتب:

السلام عليكم

أهلا بك أختي الكريمة

للأسف موضوعك مخالف لقوانين المنتدى لأنه يُمنع حل الواجبات, عليك بإدراج محاولتك للسؤال.

أرجو لك التوفيق.

اها انا صديقتها انه ليس واجباً فقد طلب منا الدكتو انه مسموح ان ناخذ المساعدة عن طريق الانترنت او اي شخص يعرف بالبرمجة ولكن يجب علينا ان نفهم الكود فقط حتى اذا سألنا اي سؤال نكون ان نفهم ما يريد

#4

حتى لو سمح لكم الدكتور بأخذ المساعدة .. يبقى الموضوع مخالف لأن المنتدى يمنع تقديم الحلول الجاهزة.

لازم انشوف محاولتكم عشان نقدر نساعدكم.

بالتوفيق.

تم تعديل هذه المشاركة بواسطة Sn@CkeR في 5 ديسمبر 2012 في 21:00

1
#5

طيب هذه محاولتي لحل السؤال استخدمت الـ recursion لأن الدكتور طلب منا ذلك

1)public static int size(int root){

if (root==null)

return 0;

else

return 1+size(root.left())+(root.right());))

2)public static int Internal_size(int node){

if((node == NULL) || (node.left == NULL && node.right == NULL))

return 0;

else

return 1 + getInternal_size(node.left)+

getInternal_size(node.right);

3) public static int EXternal_size(int node){

if((node !== NULL) || (node.left !== NULL && node.right ! == NULL))

return 0;

else

return getInternal_size(node.left)+

getInternal_size(node.right);

4)public static int twoChildren_size(int node){

if (node==null){

return 0;}

if(node.left != null &&node.right !=null){

reurn 1+twoChildren_size(node.left)+twoChildren_size(node.right)

return twoChildren_size(node.left)+twoChildren_size(node.right)}

5)public static int oneChildren_size(int node){

if (node==null){

return 0;}

if(node.left != null &&node.right = null || node.left = null &&node.right != null{

reurn 1+oneChildren_size(node.left)

return 1+ oneChildren_size(node.right)

return oneChildren_size(node.left)+oneChildren_size(node.right)}

6)public static oid PrintRange(int x,int y){

if(x==null)

return;

print(x.left)

System.out.print(x.key)

7).public static int nodeLevel(int x){

int m=x;

if(leftChild != null)

m=max(m,leftChild.computeDepth(x+1);

if(rightChild != null)

m=max(m,rightChild.computeDepth(x+1);

8).public static void Printpath(int x,int y){

if(x!=null){

return Printpath(x,y)

}

return 0;

}}

9).public static void PrintLCA(int x,int y){

while (root!=null){

if(a<root.data && b<root.data){

root=root.left;}

else if(a>root.data && b>root.data){

root=root.right;}

else

return root;

}}

ولكني لم أعرف كتابة ميثود يطبع الأرقام Level by Level

ولكني نسييت كيف اربطهم مع بعض واستدعيهم في الـ main وكيفية القراءة من الملف لهذا السبب طلبنا حل السؤال

ونحن ما زلنا مبتدئين بالجافا

ولكن لم نصل بعد الى كود يرسم الـ Binary Search Tree

تكون القراءة من الملف وليس من الـ main

#6

الرجاء منكم رؤية حلي

#7

الرجاء منكم رؤية حلي

مواضيع مشابهة