二叉树按照遍历方式可以分为三种
从左到右依次被称为先序遍历,中序遍历,后序遍历
先序遍历有两种方式
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);
}