سؤال

حسنًا ، لذا أحاول القيام باختيار ترتيب المستوى لشجرة البحث الثنائية وعدم العمل. الكود أدناه منطقي بالنسبة لي ، ولكن هذا ربما يرجع ذلك لأنني كنت أنظر إلى الأبد وأقنعت نفسي بأنه يجب أن ينجح.

void BST<T>::levelByLevel(ostream &out) { 
 Queue<BinNodePointer> q; 
 BinNodePointer subtreeRoot; 

 if(myRoot == NULL) 
  return; 
 q.enqueue(myRoot); 
 while(!q.empty()) {
  subtreeRoot = q.front(); 
  out << subtreeRoot->data << " "; 
  q.dequeue(); 

  if(subtreeRoot->left != NULL) 
   q.enqueue(subtreeRoot->left); 
  if(subtreeRoot->right != NULL) 
   q.enqueue(subtreeRoot->right); 
 } 
}

ربما يمكنك أن تشير يا رفاق إلى ما أفعله خطأ ، على الرغم من أنني أفهم مفهوم شجرة البحث الثنائية ، إلا أنني لست 100 ٪ في كل خصوصيات وعموميات.

هل كانت مفيدة؟

المحلول

لا حرج في النتيجة.

هل يمكن أن تشرح كيف تصل إلى 24،12،18؟

أفترض أنك تدرج 12 أولاً على مستوى الجذر ، ثم تقوم بإدراج 24 والتي تنتهي بها العقدة اليمنى للجذر 12 ثم يمكنك إدراج 18 والتي تنتهي بها العقدة اليسرى 24 - لأن 18 أكبر ثم الجذر 12 لذا الذهاب إلى اليمين ، ثم 18 أقل من 24 لذلك يتم إدراجها كعقدة يمين 24

لذا:

12


12
  \
  24

12
  \
  24
 /
18

لذلك لديك 3 مستويات ، المستوى 1 (12) ، المستوى 2 (24) ، المستوى 3 (18) ، لذا فإن اجتياز المستوى 12،24،18 حيث يتم إدخال خوارزميةك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top