#include <stack>
#include <iostream>
using namespace std;
typedef struct BiTNode{
int data;
BiTNode *lchild, *rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T)//建樹,按先序順序輸入節點
{
int ch;
scanf("%d",&ch);
if(ch==0)
{
T=NULL;
return;
}
else
{
if(!T){
T = new BiTNode;
}
T->data=ch;
T->lchild = T->rchild =NULL;
cout<<T->data<<"的左子:"<<endl;
CreateBiTree((T->lchild));
cout<<T->data<<"右子:"<<endl;
CreateBiTree((T->rchild));
}
}
void myPostOrderTraverse(BiTree T){
int flag[20];
stack<BiTree> s;
if(!T)
{
printf("空樹!\n");
return;
}
do{
while(T){
s.push(T); //3 6,7
T=T->lchild; //
flag[s.size()]=0;
}
while(!s.empty()&&flag[s.size()]==1){
T=s.top();
s.pop();
cout<<T->data<<endl;
}
if(!s.empty()){
T=s.top(); //1 6, 7
if(T->rchild==NULL){
cout<<T->data<<endl;
T=NULL;
s.pop();
}else{
flag[s.size()]=1;
T=T->rchild; //3 7
}
}
}while(!s.empty());//!s.empty()
}
int main()
{
BiTree T ;
CreateBiTree(T);
myPostOrderTraverse(T);
return 0;
}
學習筆記:二叉樹後序遍歷非遞歸算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.