好吧,所以我正在尝试对二叉查找树进行级别遍历并且它不工作。下面的代码对我来说很合理,但这可能是因为我一直在看它,并且我确信它应该可以工作。BST级别遍历
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%。
那么你会得到什么结果?你期望什么? – stefanB 2010-05-02 23:00:46
好吧,如果我进入这样的事情到树:12 24 18 .. 水平遍历的输出为:12 24 18 ..这是不正确的。我期待的输出是24 12 18 – 2010-05-02 23:08:19
是'BST <>'AVL?如果不是,那么你的期望是错误的。这个输入会产生一个有三个级别的树。如果树按左右排序排序,那么你应该得到这样一棵树:root是12,左边的孩子是24,右边的孩子是NULL; 24的左边孩子是NULL,24的右边孩子是18. – wilhelmtell 2010-05-02 23:16:12