实现方法[编辑]
- 首先将根节点放入队列中。
- 从队列中取出第一个节点,并检验它是否为目标。
- 如果找到目标,则结束搜寻并回传结果。
- 否则将它所有尚未检验过的直接子节点加入队列中。
- 若队列为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。
- 重复步骤2。
std::queue<node*> visited, unvisited;
node nodes[9];
node* current;
unvisited.push(&nodes[0]); //先把root放入unvisited queue
while(!unvisited.empty()) //只有unvisited不空
{
current = (unvisited.front()); //目前應該檢驗的
if(current -> left != NULL)
unvisited.push(current -> left); //把左邊放入queue中
if(current -> right != NULL) //右边压入。因为QUEUE是一个先进先出的结构,所以即使后面再压其他东西,依然会先访问这个。
unvisited.push(current -> right);
visited.push(current);
cout << current -> self << endl;
unvisited.pop();
}