سؤال
حسنًا ، لذا أحاول القيام باختيار ترتيب المستوى لشجرة البحث الثنائية وعدم العمل. الكود أدناه منطقي بالنسبة لي ، ولكن هذا ربما يرجع ذلك لأنني كنت أنظر إلى الأبد وأقنعت نفسي بأنه يجب أن ينجح.
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 حيث يتم إدخال خوارزميةك.