您的位置:首页 > 其它

二叉树深度优先遍历和广度优先遍历

2015-09-16 23:08 417 查看
深度优先遍历,将一颗二叉树优先往更深层次遍历,先遍历根,然后分别是左子树和右子树,借助栈的数据结构来实现。先将右子树压栈,在将左子树压栈。

void depthFirstSearch(Tree root){

stack<Node *> nodeStack; //使用C++的STL标准模板库

nodeStack.push(root);

Node *node;

while(!nodeStack.empty()){

node = nodeStack.top();

printf(format, node->data); //遍历根结点

nodeStack.pop();

if(node->rchild){

nodeStack.push(node->rchild); //先将右子树压栈

}

if(node->lchild){

nodeStack.push(node->lchild); //再将左子树压栈

}

}

}

广度优先搜索算法(Breadth First Search),又叫宽度优先搜索,或横向优先搜索。

是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。

借助队列数据结构,由于队列是先进先出的顺序,因此可以先将左子树入队,然后再将右子树入队。

这样一来,左子树结点就存在队头,可以先被访问到。

广度优先遍历代码

void breadthFirstSearch(Tree root){

queue<Node *> nodeQueue; //使用C++的STL标准模板库

nodeQueue.push(root);

Node *node;

while(!nodeQueue.empty()){

node = nodeQueue.front();

nodeQueue.pop();

printf(format, node->data);

if(node->lchild){

nodeQueue.push(node->lchild); //先将左子树入队

}

if(node->rchild){

nodeQueue.push(node->rchild); //再将右子树入队

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: