二叉树按照遍历方式可以分为三种

从左到右依次被称为先序遍历,中序遍历,后序遍历
先序遍历有两种方式
1 递归版

2 迭代式
为什么再要介绍迭代式?
因为虽然递归式和迭代式都是只要线性的时间,但迭代式的系数更小。


实现

#include<queue>
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
typedef struct node
{
struct node *lc;
struct node *rc;
char date;
}bintree,*tree;
stack<tree> s;
void createtree(tree &T)
{
char c;
cin>>c;
if(c=='#'){ // #代表空节点
T=NULL;
}
else{
T=new bintree;
T->date=c;
createtree(T->lc);
createtree(T->rc);
}
}
void print(tree T) // 递归先序遍历
{
if(T){
cout<<T->date;
print(T->lc);
print(T->rc);
}
}
void visitbintree(tree T)
{
while(T){
cout<<T->date;
if(T!=NULL)
s.push(T->rc);
T=T->lc;
}
}
void preprint(tree T) // 迭代先序遍历
{
while(true){
visitbintree(T);
if(s.empty()) break;
T=s.top();
s.pop();
}
}
int main()
{ tree T;
createtree(T);
print(T);
cout<<endl;
preprint(T);
}

本文介绍了二叉树的两种先序遍历方法:递归版和迭代版,并详细讲解了迭代版的实现过程,通过代码示例展示了如何构建二叉树及进行先序遍历。
4590

被折叠的 条评论
为什么被折叠?



