Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để thực hiện truyền qua thứ tự không đệ quy của một cây nhị phân cho trước

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