Ағаштың соңғы нұсқасы

Блог аты dosbol
Ағашқа байланысты есептердің соңғы нұсқасы. Басы мұнда және мұнда

public class Tree {

    //bul metod a nuktesi tubirden bastap kansha dengei tomen jatkanyn kaitarady
     int getLevel(int a, int[] arr, int count) {
        if (a == 1) {
            return count;
        } else {
            count++;
            return getLevel(arr[a], arr, count);
        }
    }
     int getParent(int[] arr ,int index){
         return arr[index];
     }
    //bul metod nuktenin n-inwi atasyn kaitarady, iagni n dengei jogary juredi
     int getNthParent(int[] arr, int index, int n){
         for (int i = 0; i < n; i++) {
             index = arr[index];
         }
         return index;
     }
    
    public static void main(String[] args) {
        
        //agashty toltyru
        int[] arr = new int[13];
        arr[0] = -1;        arr[1] = 0;         arr[2] = 1;         arr[3] = 2;        
        arr[4] = 3;        arr[5] = 3;        arr[6] = 2;        arr[7] = 1;        
        arr[8] = 1;  arr[9] = 8;  arr[10] = 9;  arr[11] = 9;    arr[12] = 8;
        
        Tree tree = new Tree();
        
        int firstNode=9, secondNode=9;
        int distance=0;
        //birinshi nuktenin neshinshi dengeide jatkanyn anyktau
        int firstHeight = tree.getLevel(firstNode, arr, 0);
        //ekinshi nuktenin neshinshi dengeide jatkanyn anyktau
        int secondHeight = tree.getLevel(secondNode, arr, 0);
        
        int parentFirst, parentSecond;
        //ekeuin bir dengeige dein jetkizu,aiyrmashylygy distance-ka kosylady
        if(firstHeight>secondHeight){
            int n = firstHeight-secondHeight;
            distance += n;
            firstNode = tree.getNthParent(arr, firstNode, n);
        }else if(firstHeight<secondHeight){
            int n = secondHeight-firstHeight;
            distance += n;
            secondNode = tree.getNthParent(arr, secondNode, n);
        }
        
        //eki nukte ten bolmagansha olardy atalaryna tenestire beremiz,
        //ekeui eki jaktan juredi sondyktan distance 2 ge artyp otyrady
        while(firstNode!=secondNode){
            firstNode = tree.getParent(arr, firstNode);
            secondNode = tree.getParent(arr, secondNode);
            distance +=2;
        }
        System.out.println(distance);
    }
}

5 пікір

avatar
GetNthParent()-ди тусинбедим.
avatar
berilgen index ushin n parent jogary koteredi, mysaly 5-tin parenti 3, 3-tin parenti 4 bolsa, 5-tin 2 dengei jogary parentin tabady iagni 4 kaitarady
avatar
ассаламуалейкум, C++ білмейтін едім, түсінбей жатырмын. Әр кодтың қасына пікір-түсініктемелеріңізді қалдырып отырасыз ба? Мен сияқты түсінбей отырғандар бар шығар тағы, өтініш, өңдеп, толықтырып жіберіңізші, брааааат))
avatar
уалейкум салям, брат бул Java гой, бул кодта System.out.println-нен баска C#-тан ешкандай айырмашылыгы жок :)
avatar
Код мазмұнын ендігі ұғып алдым, ахи) Дегенмен, раҚмет.
Тек қана тіркелген және авторизациядан өткен қолданушылар пікір қалдыра алады.