BST级别遍历

时间:2010-05-02 22:55:37

标签: c++ traversal adts

好的,所以我正在尝试对二叉搜索树进行级别顺序遍历并且它无法正常工作。下面的代码对我来说很有意义,但这可能是因为我一直在看它并且我已经确信它应该有用。

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); 
 } 
}

也许你们可以指出我做错了什么,因为虽然我理解二元搜索树的概念,但我不是百分之百的全部细节。

1 个答案:

答案 0 :(得分:1)

结果没有错。

你能解释一下你是如何到达24,12,18的吗?

我假设您先在根级插入12,然后插入24,最后作为根12的右节点,然后插入18,最后作为24的左节点 - 因为18比根12更大,所以向右,然后18小于24,所以它作为24

的右节点插入

所以:

12


12
  \
  24

12
  \
  24
 /
18

所以你有三个等级,等级1(12),等级2(24),等级3(18),所以当你的算法插入时,等级遍历12,24,18。