由于层次遍历需要从上到下,从左到右的顺序按照层次进行遍历,那么每个节点只能访问一次,需要解决的问题是在访问同一层次后面的节点时,如何保证可以再访问前面节点的子节点。
这边可以用队列来实现。
先贴具体实现
void traversal() {
queue <BinaryTree *> q;
q.push(Bt.root());
while (!q.empty()) {
BinaryTree *temp = q.front();
cout << temp->value << endl;
if (temp->left) q.push(temp->left);
if (temp->right)q.push(temp->right);
<pre name="code" class="cpp"> q.pop();
}}
首先把根节点压入队列
在队列不为空的情况下,用一个二叉树指针指向队列第一个元素,访问此节点,并且将其左右子树压入队列。
队列弹出第一个元素