深度优先遍历,将一颗二叉树优先往更深层次遍历,先遍历根,然后分别是左子树和右子树,借助栈的数据结构来实现。先将右子树压栈,在将左子树压栈。
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); // 再将左子树压栈
}
}
}
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); //再将右子树入队
}
}
}