#include<iostream>
#include<stack>
using namespace std;
//定義二叉樹結點鏈式存儲結構
struct BiTNode{
int data;//數據域
struct BiTNode *lchild,*rchild;//左右孩子指針
}*BiTree;
//前序遍歷函數聲明
int PreOrder(struct BiTNode *BiTree);
int main()
{
//初始化結點
struct BiTNode node1,node2,node3,node4,node5,node6,node7,node8,node9,node10,node11;
node1=(struct BiTNode){1,&node2,&node3};
node2=(struct BiTNode){2,&node4,&node5};
node3=(struct BiTNode){7,&node6,&node7};
node4=(struct BiTNode){3,NULL,&node8};
node5=(struct BiTNode){6,NULL,NULL};
node6=(struct BiTNode){8,NULL,NULL};
node7=(struct BiTNode){9,&node9,NULL};
node8=(struct BiTNode){4,&node10,NULL};
node9=(struct BiTNode){10,NULL,&node11};
node10=(struct BiTNode){5,NULL,NULL};
node11=(struct BiTNode){11,NULL,NULL};
//建樹
BiTree=&node1;
PreOrder(BiTree);
cout << endl;
return 0;
}
//前序遍歷-非遞歸實現
int PreOrder(struct BiTNode *BiTree){
stack<struct BiTNode*> s;
struct BiTNode *p;//遍歷指針
p=BiTree;
s.push(p);
if(BiTree==NULL){return 0;}
while(!s.empty()){
//cout << "壓棧:" << p->data << endl;
p=s.top();
cout << p->data << " ";
s.pop();
if(p->rchild)s.push(p->rchild);
if(p->lchild)s.push(p->lchild);
}
return 0;
}