Advertisement
add1ctus

ThreadedBinaryTree

Dec 9th, 2015
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.40 KB | None | 0 0
  1. /***********************TBNode**************************/
  2.  
  3. class TBNode<E extends Comparable<E>> {
  4. public E info;
  5. public TBNode <E> left;
  6. public TBNode <E> right;
  7. char ltag, rtag;
  8.  
  9. public TBNode(E info) { //kreira jazol list
  10. this.info = info;
  11. ltag=rtag='-';
  12.  
  13. }
  14. }
  15.  
  16. /***********************TBTree**************************/
  17.  
  18. class TBTree <E extends Comparable<E>>
  19. {
  20.     public TBNode <E> lead;  //jazol vodach
  21.    
  22.     public boolean proveri()
  23.     {
  24.         TBNode<E> it = succInorder(lead);
  25.         while(it != lead && succInorder(it) != lead)
  26.         {
  27.             if(Math.abs((Integer)it.info - (Integer)succInorder(it).info) != 1 )
  28.                 return false;
  29.             it = succInorder(it);
  30.         }
  31.         return true;
  32.     }
  33.    
  34.     public TBTree() //kreirame jazol vodach
  35.     {
  36.         lead=new TBNode(null);
  37.         lead.left=lead.right=lead; //vodachot pokazhuva sam na sebe
  38.         lead.rtag='+';
  39.         lead.ltag='-';      
  40.     }
  41.     public void  makeRoot(E x) //kreirame jazol koren
  42.     {
  43.         TBNode <E> root= new TBNode(x);
  44.         root.left=root.right=lead; //korenot na pochetok pokazhuva kon vodachot
  45.         lead.left=root; //vodachot samo od levo pokazhuva kon korenot
  46.         lead.ltag='+';      
  47.        
  48.     }
  49.    
  50.     public void insert(E x, TBNode<E> r)
  51.     {
  52.         if(r.left==r) //ako drvoto e prazno, odnosno imame samo jazol vodach
  53.             makeRoot(x);          
  54.         else
  55.         {            
  56.             TBNode <E> n=new TBNode(x);
  57.             TBNode <E> pom = r.left; //pochuvame od korenot
  58.             //da barame soodvetna pozicija za vmetnuvanje                        
  59.            while(pom!=r) //se duri ne gi izmineme site jzali
  60.            {
  61.                int comp=x.compareTo(pom.info);
  62.                if(comp<0)
  63.                {                  
  64.                    if(pom.ltag=='-') //sme nashle pozicija za vmetnuvanje
  65.                    {
  66.                        n.left=pom.left;
  67.                        pom.left=n;
  68.                        n.right=pom;
  69.                        pom.ltag='+';  
  70.                        break;
  71.                    }
  72.                    else
  73.                        pom=pom.left;
  74.                }
  75.                else if(comp>0)
  76.                {
  77.                    if(pom.rtag=='-') //sme nashle pozicija za vmetnuvanje
  78.                    {
  79.                        n.right=pom.right;
  80.                        pom.right=n;
  81.                        n.left=pom;
  82.                        pom.rtag='+';        
  83.                        break;
  84.                    }
  85.                    else
  86.                        pom=pom.right;
  87.                }
  88.                else ;
  89.            }                                
  90.         }          
  91.     }
  92.        
  93.     public TBNode<E> predInorder(TBNode <E> node)
  94.     {
  95.         if(node.ltag=='-') //ako node e najleviot jazol vo drvoto
  96.             return node.left;
  97.         /* prethodnik na jazol vo inorder e posledno poseteniot jazol pred da se poseti node
  98.          * a toa e najdesniot jazol vo levoto podsteblo na node */
  99.         TBNode<E> pom=node.left;
  100.         while(pom.rtag=='+')
  101.             pom=pom.right;        
  102.         return pom;
  103.     }
  104.    
  105.     public TBNode<E> succInorder(TBNode <E> node)
  106.     {
  107.         if(node.rtag=='-') //ako node e najdesniot jazol vo drvoto
  108.             return node.right;
  109.         /* sledbenik na jazol vo inorder e prvo poseteniot jazol otkako kje se poseti node
  110.          * a toa e najleviot jazol vo desnoto podsteblo na node */
  111.         TBNode<E> pom=node.right;
  112.         while(pom.ltag=='+')
  113.             pom=pom.left;        
  114.         return pom;
  115.     }
  116.    
  117.     public TBNode <E> find(E x, TBNode <E> r)
  118.     {
  119.         if(lead.left==lead) return null;        
  120.         TBNode <E> pom=lead.left;
  121.         while(pom!=lead)
  122.         {
  123.              int comp=x.compareTo(pom.info);
  124.                if(comp<0)
  125.                pom=pom.left;
  126.                else if(comp>0)
  127.                pom=pom.right;
  128.                else
  129.                    return pom;
  130.         }
  131.         return pom;      
  132.     }
  133.    
  134.     public void inorder()
  135.     {
  136.         if(lead.left==lead)
  137.             return;
  138.         //treba da pochneme od najleviot jazol, koj e sledbenik na lead
  139.         TBNode<E> pom=succInorder(lead);      
  140.         //potoa so pomosh na funkcijata sledbenik, gi izminuvame site jazli        
  141.         while(pom!=lead)
  142.         {
  143.             System.out.print(pom.info+" ");
  144.             pom=succInorder(pom);
  145.         }
  146.         System.out.println();
  147.     }
  148.    
  149.     public TBNode <E> succPreorder(TBNode <E> node)
  150.     {
  151.         if(node.ltag=='+') //ako levo ima jazol, toj e prviot koj kje se izmine posle jazolot node
  152.             return node.left;
  153.         if(node.rtag=='+') //ako levo nema, no desno ima jazol, toj e sledbenik
  154.         return node.right;
  155.          //ako stanuva zbor za list
  156.         while(node.rtag=='-')//dvizhi se po nishki na desno, duri ne dojdesh do vrska
  157.         node=node.right;
  158.         if(node==lead) return lead; //ako stanuva zbor za posledniot jazol od izminuvanjeto, vodachot e sledbenik
  159.         else
  160.         return node.right;
  161.     }
  162.    
  163.     public TBNode <E> predPostorder(TBNode <E> node)
  164.     {
  165.         if(node.rtag=='+') //ako desno ima jazol toj kje se izmine vednash pred jazolot p
  166.         return node.right;
  167.         while(node.ltag=='-')//dvizhi se po nishki na levo, duri ne dojdesh do vistinska vrska
  168.         node=node.left;
  169.         return node.left; //vrati go jazolot levo od pogore najdeniot koren
  170.     }
  171.    public void insertRight(TBNode <E> parent, TBNode <E> child)
  172.   {
  173.     TBNode <E> pom;
  174.     child.right=parent.right;    //1
  175.     child.rtag=parent.rtag;      //1
  176.  
  177.     child.left=parent;  //2
  178.     child.ltag='-'; //2
  179.  
  180.     parent.right=child; //3
  181.     parent.rtag='+';    //3
  182.  
  183.     if(child.rtag=='+')
  184.     {
  185.     pom=child.right;
  186.     while(pom.ltag=='+')
  187.     pom=pom.left;
  188.     pom.left=child;
  189.     }    
  190.  }
  191.  
  192.    
  193. }
  194.  
  195. public class ThreadedBinaryTree {
  196.  
  197.    
  198.     public static void main(String[] args) {      
  199.        
  200.         TBTree <Integer> tree=new TBTree();
  201.        tree.insert(7, tree.lead);
  202.         tree.insert(2, tree.lead);
  203.         tree.insert(1, tree.lead);
  204.         tree.insert(15, tree.lead);
  205.         tree.insert(13, tree.lead);
  206.         tree.insert(14, tree.lead);          
  207.        
  208.         System.out.println(tree.proveri());
  209.        
  210.         tree.inorder();
  211.        
  212.        
  213.     }
  214.  
  215.    
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement