好吧,所以我正在嘗試對二叉查找樹進行級別遍歷並且它不工作。下面的代碼對我來說很合理,但這可能是因爲我一直在看它,並且我確信它應該可以工作。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