Advertisement
Guest User

8

a guest
May 24th, 2015
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.08 KB | None | 0 0
  1. package drzewo;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Drzewo {
  6.  
  7.     static Scanner input = new Scanner(System.in);
  8.      
  9.     static class Node
  10.     {
  11.         public int info ;
  12.         public Node left;
  13.         public Node right ;
  14.        
  15.         public void displayNode()
  16.         {
  17.             System.out.println(info);
  18.             if(left!=null)
  19.                 left.displayNode();
  20.             if(right!=null)
  21.                 right.displayNode();
  22.         }
  23.        
  24.         Node()
  25.         {
  26.             info = 0;
  27.             left = null;
  28.             right = null;
  29.         }
  30.    
  31.         Node(int a, Node l, Node r)
  32.         {
  33.             info = a;
  34.             left = l;
  35.             right = r;
  36.         }  
  37.        
  38.     }
  39.    
  40.     static class Tree
  41.     {
  42.         private Node root = new Node(0,null,null);
  43.         Tree()
  44.         {
  45.             root = null;
  46.         }
  47.        
  48.         Tree(Node a)
  49.         {
  50.             root = a;
  51.         }
  52.        
  53.         public Node korzen()
  54.         {
  55.             return root;
  56.         }
  57.        
  58.         public void preorder(Node w)
  59.         {
  60.             if(w != null)
  61.             {
  62.                 System.out.print(w.info+" ");
  63.                 preorder(w.left);
  64.                 preorder(w.right);
  65.             }
  66.         }
  67.        
  68.         public void inorder(Node w)
  69.         {
  70.             if(w != null)
  71.             {
  72.                 inorder(w.left);
  73.                 System.out.print(w.info+" ");
  74.                 inorder(w.right);
  75.             }
  76.         }
  77.        
  78.         public void postorder(Node w)
  79.         {
  80.             if(w != null)
  81.             {
  82.                 postorder(w.left);
  83.                 postorder(w.right);
  84.                 System.out.print(w.info+" ");
  85.             }
  86.         }
  87.        
  88.         public void insert(int id, Node a)
  89.         {
  90.             a.info=id;
  91.         }
  92.        
  93.         public void newNodeL(Node p, int key)
  94.         {
  95.             Node a = new Node(key,null,null);
  96.             p.left = a;
  97.         }
  98.        
  99.         public void newNodeR(Node p, int key)
  100.         {
  101.             Node a = new Node(key,null,null);
  102.             p.right = a;
  103.         }
  104.        
  105.         public void preindrzewo(Tree T,Node w,int []tabpre, int []tabin, int poczatek, int koniec, int inpo)
  106.         {      
  107.             int kr=inpo;
  108.             int c=0;
  109.                        
  110.             if(poczatek == 0)
  111.             {
  112.                 Node a = new Node(tabpre[0],null,null);
  113.                 T = new Tree(a);
  114.                 w = T.korzen();
  115.             }
  116.            
  117.             T.insert(tabpre[poczatek], w);
  118.            
  119.             if(koniec-poczatek >= 0)
  120.                 while(tabpre[poczatek] != tabin[kr+c])
  121.                     c++;// index korzenia w tabin mamy L K P
  122.  
  123.             if(poczatek+c+1 == koniec)
  124.                 if(tabpre[poczatek+c+1]==tabin[koniec])
  125.                     T.newNodeR(w, tabin[koniec]);
  126.            
  127.             //Czesc Lewa
  128.             if(c > 1)
  129.             {                                  
  130.                 T.newNodeL(w, 0);
  131.                 T.preindrzewo(T, w.left, tabpre, tabin, poczatek+1, (poczatek+c),inpo);
  132.             }
  133.             else
  134.             {              
  135.                 if(tabpre[poczatek]==tabin[inpo])
  136.                 {
  137.                     T.newNodeR(w, tabin[++inpo]);
  138.                     inpo--;
  139.                 }
  140.                 else
  141.                     T.newNodeL(w, tabin[inpo]);
  142.             }
  143.            
  144.             //Czesc Prawa
  145.             if(koniec - poczatek - c - 1 > 0)
  146.             {
  147.                 inpo = c+inpo+1;
  148.                 T.newNodeR(w, 0);
  149.                 T.preindrzewo(T, w.right, tabpre, tabin, poczatek+c+1, koniec, inpo);
  150.             }
  151.            
  152.             if(poczatek==0)
  153.             {
  154.                // System.out.println("..............");
  155.                // System.out.println("Postorder");
  156.                 T.postorder(T.korzen());
  157.                 System.out.println();
  158.                // System.out.println("..............");
  159.             }
  160.         }
  161.        
  162.         public void postindrzewo(Tree T,Node w,int []tabpost, int []tabin, int poczatek, int koniec, int inpo)
  163.         {      
  164.             int kr=inpo;
  165.             int c=0;
  166.                        
  167.             if(koniec == tabpost.length-1)// za pierwszym razem
  168.             {
  169.                 Node a = new Node(tabpost[koniec],null,null);
  170.                 T = new Tree(a);
  171.                 w = T.korzen();
  172.             }
  173.            
  174.             T.insert(tabpost[koniec], w);
  175.            
  176.             if(koniec-poczatek >= 0)
  177.                 while(tabpost[koniec] != tabin[kr+c])
  178.                     c++;
  179.            
  180.             if(poczatek+c+1 == koniec)
  181.                 if(tabpost[poczatek+c+1]==tabin[koniec])
  182.                     T.newNodeR(w, tabin[koniec]);
  183.            
  184.             //Czesc Lewa
  185.             if(c > 1)
  186.             {                                  
  187.                
  188.                     T.newNodeL(w, 0);
  189.                     T.postindrzewo(T, w.left, tabpost, tabin, poczatek, (poczatek+c-1),inpo);
  190.             }
  191.             else
  192.             {              
  193.                 if(tabpost[poczatek]!=tabin[inpo])
  194.                 {
  195.                     T.newNodeR(w, tabin[++inpo]);
  196.                     inpo--;
  197.                 }
  198.                 else
  199.                     T.newNodeL(w, tabin[inpo]);
  200.             }
  201.            
  202.             //Czesc Prawa
  203.             if(koniec-1 - (poczatek + c) > 0)
  204.             {
  205.                 inpo = c+inpo+1;
  206.                     T.newNodeR(w, 0);
  207.                     T.postindrzewo(T, w.right, tabpost, tabin, poczatek+c, koniec-1, inpo);
  208.             }
  209.  
  210.             if(koniec==tabpost.length-1)
  211.             {
  212.                 //System.out.println("Postorder");
  213.                 T.preorder(T.korzen());
  214.                 System.out.println();
  215.             }
  216.         }
  217.        
  218.     }
  219.    
  220.     public static void main(String[] args)
  221.     {
  222.            
  223.         int ile = input.nextInt();
  224.         String a;
  225.         String b;
  226.             for(int i=0;i<ile;i++)
  227.             {
  228.                 Node w = new Node(0,null,null);
  229.                 Tree T = new Tree(w);
  230.                 int n = input.nextInt();
  231.                
  232.                 a =input.next();
  233.                 //System.out.println(a);
  234.                 int[] tab = new int[n];
  235.                 for(int j=0;j<n;j++)
  236.                     tab[j] = input.nextInt();
  237.                 b =input.next();
  238.                 //System.out.println(b);
  239.                 int[] k = new int[n];
  240.                 for(int l=0;l<n;l++)
  241.                     k[l] = input.nextInt();
  242.                 if(a.charAt(1)=='O')
  243.                 {
  244.                    // System.out.println("Wszedl POST");
  245.                     T.postindrzewo(T, T.korzen(), tab, k, 0, tab.length-1, 0);
  246.                 }    
  247.                 if(a.charAt(1)=='R')
  248.                 {
  249.                     //System.out.println("wszedl Pre");
  250.                     T.preindrzewo(T, T.korzen(), tab, k, 0, tab.length-1, 0);
  251.                 }
  252.                    
  253.  
  254.             }
  255.        
  256.        
  257.     }  
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement