深度优先
沿着树的深度遍历树的节点,尽可能深的搜索树的分支
用到的数据结构:栈
通俗的总结原理:进栈、出栈、一搜到底
代码
void dfs(Tree * root)
{
stack<Tree*> nodestack;
nodestack.push(root);
Tree* node;
while(!nodestack.empty())
{
node = nodestack.top();
cout<<node->data<<endl;
nodestack.pop();
if(node->rchild)
{
nodestack.push(node->rchild);
}
if(node->lchild)
{
nodestack.push(node->lchild);
}
}
}
广度优先
从根节点开始,沿着树的宽度遍历树的节点,直到所有节点都被遍历完为止
用到的数据结构:队列
通俗的总结:入队、出队、步步为营
代码:
void bfs(Tree* root)
{
queue<Tree*> que;
que.push(root);
Tree* node;
while(!que.empty())
{
node = que.front();
que.pop();
cout<<node->data<<endl;
if(node->lchild)
{
que.push(node->lchild);
}
if(node->rchild)
{
que.push(node->rchild)l;
}
}
}