Advertisement
TeamFocus-Matija

Vezbe

May 19th, 2016
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.50 KB | None | 0 0
  1. package main;
  2.  
  3. import labis.cvorovi.CvorStabla;
  4. import labis.exception.LabisException;
  5. import labis.stabla.ABinarnoStablo;
  6.  
  7. public class BinanoStablo extends ABinarnoStablo{
  8.    
  9.     public boolean daLiPostojiIsti(CvorStabla k, CvorStabla neki){
  10.         if(k==null || neki==null){
  11.             return false;
  12.         }
  13.        
  14.         if(k.podatak == neki.podatak && k != neki){
  15.             return true;
  16.         }else{
  17.             return daLiPostojiIsti(k.levo, neki) || daLiPostojiIsti(k.desno, neki);
  18.         }
  19.     }
  20.    
  21.     public CvorStabla vratiMaksimalanPolulist(CvorStabla k) throws LabisException{
  22.         if(k == null){
  23.             return k;
  24.         }
  25.        
  26.         CvorStabla maxPolulist = null;
  27.         CvorStabla maxLevi = vratiMaksimalanPolulist(k.levo);
  28.         CvorStabla maxDesni = vratiMaksimalanPolulist(k.desno);
  29.        
  30.         if((k.levo == null && k.desno!=null) || (k.levo !=null && k.desno==null)){
  31.             maxPolulist = k;
  32.         }
  33.         if(maxPolulist == null || (maxLevi !=null && maxLevi.podatak > maxPolulist.podatak)){
  34.             maxPolulist = maxLevi;
  35.         }
  36.        
  37.         if(maxPolulist == null || (maxDesni !=null && maxDesni.podatak > maxPolulist.podatak)){
  38.             maxPolulist = maxDesni;
  39.         }
  40.        
  41.         return maxPolulist;
  42.     }
  43.    
  44.     public void ubaci(CvorStabla k,int podatak) throws LabisException{
  45.         if(k == null){
  46.             koren = new CvorStabla(podatak,null,null);
  47.             return;
  48.         }
  49.         if(k.podatak > podatak){
  50.             if(k.levo==null){
  51.                 CvorStabla novi = new CvorStabla(podatak,null,null);
  52.                 k.levo = novi;
  53.                 return;
  54.             }else{
  55.                 ubaci(k.levo,podatak);
  56.             }
  57.         }else{
  58.             if(k.desno == null){
  59.                 CvorStabla novi = new CvorStabla(podatak,null,null);
  60.                 k.desno = novi;
  61.                 return;
  62.             }else{
  63.                 ubaci(k.desno,podatak);
  64.             }
  65.         }  
  66.     }
  67.    
  68.     public void izbaci(int podatak) throws LabisException{
  69.         CvorStabla cvor = pronadji(koren,podatak);//VRACA POKAZIVAC NA CVOR AKO GA NADJEMO
  70.        
  71.         if(cvor == null){
  72.             return;
  73.         }
  74.        
  75.         if(cvor.levo !=null && cvor.desno !=null){//UNUTRASNJI CVOR!!!
  76.             CvorStabla maxL = maxCvor(cvor.levo);//VRACA POKAZIVAC NA NAJVECI POKAZIVAC U LEVOM STABLU
  77.             cvor.podatak = maxL.podatak;
  78.             izbaciListIliPoluList(maxL);
  79.         }
  80.        
  81.         izbaciListIliPoluList(cvor);       
  82.     }
  83.    
  84.     private void izbaciListIliPoluList(CvorStabla cvor) {
  85.         CvorStabla roditelj = nadjiRoditelja(koren,cvor);
  86.         CvorStabla dete = null;
  87.         dete = cvor.levo !=null ? cvor.levo:cvor.desno; // ako vazi uslov vrati prvi, ako nije vrati ovaj drugi!
  88.        
  89.         if(roditelj == null){
  90.             koren = dete;
  91.         }else{
  92.             if(roditelj.levo == cvor){
  93.                 roditelj.levo = dete;
  94.             }else{
  95.                 roditelj.desno = dete;
  96.             }
  97.         }
  98.     }
  99.  
  100.     private CvorStabla nadjiRoditelja(CvorStabla tekuci, CvorStabla cvor) {
  101.         if(tekuci == null || tekuci == cvor){
  102.             return null;
  103.         }
  104.         if(cvor.podatak < tekuci.podatak){
  105.             if(tekuci.levo != null && tekuci.levo == cvor){
  106.                 return tekuci;//ZNACI OVO JE ONDA RODITELJ!!!
  107.             }
  108.             return nadjiRoditelja(tekuci.levo, cvor);
  109.         }else{
  110.             if(tekuci.desno != null && tekuci.desno == cvor){
  111.                 return tekuci;
  112.             }
  113.             return nadjiRoditelja(tekuci.desno, cvor);
  114.         }
  115.        
  116.     }
  117.  
  118.     private CvorStabla maxCvor(CvorStabla tekuci) {
  119.         while(tekuci !=null && tekuci.desno !=null){
  120.             tekuci = tekuci.desno;
  121.         }
  122.         return tekuci;
  123.     }
  124.  
  125.     private CvorStabla pronadji(CvorStabla tekuci, int podatak) {
  126.         while(tekuci!=null){
  127.             if(tekuci.podatak == podatak){
  128.                 return tekuci;
  129.             }
  130.             if(tekuci.podatak > podatak){
  131.                 tekuci = tekuci.levo;
  132.             }else{
  133.                 tekuci = tekuci.desno;
  134.             }
  135.         }
  136.         return tekuci;//BICE NULL
  137.     }
  138.  
  139.     public static void main(String[] args) {
  140.         System.out.println("CIGLANA PETAK VECE POSLE RACUNOVODSTVA!");
  141.     }
  142.    
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement