(小米面试真题,他么的被虐了一脸)
BFS(宽度优先遍历),用队列来辅助实现
1)从源节点开始一次按照宽度进队列,然后弹出
2)每弹出一个点,把该结点没进过队列的临界点放入到队列
3)直到队列为空
//没啥说的扣代码,自己需要建造一个图的类自己实践
void methond(Nodess* node)
{
if( node==NULL )
{
return ;
}
deque<Nodess* > queue;
set<Nodess* > st;
queue.push_front(node);
st.insert(node);
while( !queue.empty() )
{
Nodess* cur = queue.back();
cout<<cur->value<<" ";
for( Nodess* next != cur->nexts )
{
if( !st.count(next))
{
st.insert(next);
queue.push_front(next);
}
}
}
}
DFS(深度优先遍历),用栈来辅助实现
1)从源节点开始把结点按照深度依次入栈,然后弹出
2)每弹出一个点,把该结点没进过栈的临界点放入到栈
3)直到栈为空
void methond(Nodess* node)
{
if( node==NULL )
{
return ;
}
stack<Nodess* > stk;
set<Nodess* > setset;
stk.push(node);
setset.insert(node);
cout<<node->value<<endl;
while( !stk.empty())
{
Nodess* cur = stk.top();stk.pop();
for(Nodess* next : cur.nexts)
{
if(!setset.count(next))
{
stk.push(cur);
stk.push(next);
setset.insert(next);
cout<<next->value;
break;
}
}
}
}
//基础的知识需要用心理解