Nếu cây nhị phân được duyệt theo thứ tự sau, thì cây con bên trái được truy cập đầu tiên, sau đó đến cây con bên phải và sau đó là cây gốc. Đây là một chương trình C ++ để duyệt qua Cây thứ tự bài đăng mà không cần đệ quy. Chúng tôi thực hiện chương trình ở đây bằng cách sử dụng ngăn xếp.
Thuật toán
Đối với truyền tải đơn hàng bưu điện:
Begin Declare postorder_traversal(struct node*t,struct tree**top) if(t==NULL) then print “Empty Tree”. Return. Print “Postorder Data Using Stack :”. Call push(t,top) function to insert values. Declare a pointer store against tree structure. Initialize struct tree*store=NULL. while(t!=NULL) store=*top; if(store->v==0) then if(t->r!=NULL) then (store->v)++ push(t->r,top) if(t->l!=NULL) then (store->v)++ push(t->l,top) if(store->v==0) then cout<d t=NULL pop(top) else cout<d t=NULL pop(top) if(*top!=NULL) then t=(*top)->link End
Ví dụ
#include<iostream> #include<stdlib.h> using namespace std; struct node { int d; struct node *l,*r; }; struct tree { int v; struct node*link; struct tree*n; }; struct node*create_node(int); struct node*create_node(int value) { struct node*new_node=(struct node*)malloc(sizeof(struct node)); if(new_node!=NULL) { new_node->d=value; new_node->l=new_node->r=NULL; return new_node; } else { printf("\n Memory overflow."); return NULL; } } void push(struct node*,struct tree*); void push(struct node*node,struct tree**top) { struct tree*new_node=(struct tree*)malloc(sizeof(struct tree)); if(new_node!=NULL) { new_node->link=node; new_node->n=*top; new_node->v=0; *top=new_node; } else { cout<<"\n Memory overflow."; return ; } } void pop(struct tree**); void pop(struct tree**top) { if(*top!=NULL) { struct tree*remove=*top; *top=(*top)->n; remove->link=NULL; remove->n=NULL; remove=NULL; } } void postorder_traversal(struct node*,struct tree**); void postorder_traversal(struct node*t,struct tree**top) { if(t==NULL) { cout<<"\n Empty Tree"; return; } cout<<"\n Postorder Data Using Stack :"; push(t,top); struct tree*store=NULL; while(t!=NULL) { store=*top; if(store->v==0) { if(t->r!=NULL) { (store->v)++; push(t->r,top); } if(t->l!=NULL) { (store->v)++; push(t->l,top); } if(store->v==0) { cout<<t->d; t=NULL; pop(top); } } else { cout<<t->d; t=NULL; pop(top); } if(*top!=NULL) t=(*top)->link; } } int main(){ struct node*root=NULL; struct tree*top=NULL; root = create_node(20); root->l = create_node(10); root->r = create_node(30); root->r->r = create_node(7); root->l->l = create_node(25); root->l->r = create_node(35); root->l->r->r = create_node(40); root->l->l->r = create_node(26); postorder_traversal(root,&top); return 0; }
Đầu ra
Postorder Data Using Stack :26 25 40 35 10 7 30 20