BFS:set+queue
DFS:stack+set
以当前结点距离最近的原则输出,使用set记录,避免重复输出,使用queue进行输出
void BFS(Node* node)
{
if (node == NULL)return;
unordered_set<Node*>s;
queue<Node*>q;
q.push(node);
s.insert(node);
while (!q.empty())
{
Node* tmp = q.front();
cout << tmp->val;
q.pop();
for (Node* t : tmp->next)
{
if (s.find(t) == s.end())//不在set中
s.insert(t);
q.push(t);
}
}
}
深度优先遍历:
void DFS(Node* node)
{
if (node == NULL)return;
unordered_set<Node*>set;
stack<Node*>s;
set.insert(node);
s.push(node);
cout << node->val << endl;
while (!s.empty())
{
Node* tmp = s.top();
s.pop();
for (auto t : tmp->next)
{
if (set.find(t) == set.end())
{
set.insert(t);
s.push(tmp);
s.push(t);
cout << t->val;
break;
}
}
}
}