پیمایش پیش ترتیب !

By eprogrammer

سلام

اگر ساختمان داده داشته باشيد حتما به به پيمايش هاي پيش ترتيب و پس ترتيب و ميان ترتيب بر خورد كرده ايد . براي نوشتن آنها در صورت استفاده از c/c++ يا Java از كلاس(سی ++ و جاوا) و struct  در سي براي پياده سازي استفاده مي كنيد .
به اين صورت كه يك كلاس TreeIterator (مثلا) استفاده مي كنيد و با استفاده از ارث بري  كلاسی ديگر با عنوان PostOrder یا InOrder یا 
PreOrder ساخته  که با استفاده از یک پشته و یک کلاس و یک شمارنده این عمل را انجام دهیم .
همان طور که می بینید یک پروسه ی طولانی و حتما با اشتباهات فراوان همراه است اما جند روز پیش در یک وبلاگ روشی جالب دیدیم که بدین شرح بود :

نکته : این برنامه به زبان جاواست که با اندکی تغییر برای سی++ قابل استفاده است .

 void nonrecpreorder(BinaryTree tree){
      BinaryNode currnode=tree.root;// یک گره ایجاد و مقدار آن را برابر ریشه ی درخت قرار می دهد
      while(true){                                     // یک حلقه ی بی نهایت
          if(currnode==null)                     // این شرط برای چیست؟
              break;
          //int visited=0 in the BinaryTree defined ! 
          if(currnode.left!=null && currnode.Visited!=1) //
           currnode=currnode.left;
          else if(currnode.right!=null && currnode.right.Visited!=1)
            currnode=currnode.right;
                else if(currnode.Visited==0)
                    {
                    // element defined like :      T element   //in BinaryTree
                     System.out.print(currnode.element+ ” “);
                    currnode.Visited=1;
                    }
          else
          {
                            currnode=currnode.parent;
          
           }
      }          
  }

جالب بود نه !

 

 

 

يك پاسخ برايش بگذاريد