• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tworzenie tablicy wszystkich możliwych ścieżek drzewa binarnego ze względu na podany node - JS

+1 głos
739 wizyt
pytanie zadane 9 września 2019 w JavaScript przez Michał Kołomański Nowicjusz (210 p.)

Witam serdecznie, 

napisałem program od generowania drzewa binarnego (każdy node ma dwoje children) w JavaScript.

Schemat drzewa:

Każdy obiekt drzewa posiada nazwę wraz z ID (pole pierwsze ze schematu), oraz poziom na którym występuję (pole drugie). Użytkownik może utworzyć dowolnie duże drzewo, deklarując zmienną levels, która odpowiada za liczbę poziomów drzewa.

 

Chciałbym dodać teraz nową funkcjonalność. Użytkownik podaję numer gałęzi (np. zmienna node = 3) i otrzymuje tablicę, której każdy indeks jest ścieżką do obiektu znajdującego się poniżej Object_3. 

Przykład:

node=3, levels =4 (jeden poziom więcej niż na schemacie)

Otrzymujemy [[Object_1, Object_3] , [Object_1, Object_3, Object_6], , [Object_1, Object_3, Object_7], 

[Object_1, Object_3, Object_6, Object_12], [Object_1, Object_3,Object_6, Object_13], itd.]

z generowaniem tego co jest nad węzłem już sobie poradziłem:

var node = 3;
var levels = 4;

 level_description = [];
//Tablica w której mam wszelakie informacje o poziomie: lv_nr,ilość obiektow i indexy obj
    for (var i = 0; i < levels; i++) {
        obj = {};
        obj.level = i + 1;
        obj.amount = Math.pow(2, i);
        obj.indexes = [];
        if (i === 0) {
            obj.indexes[0] = 1;
            level_description.push(obj);
        } else {
            for (var j = 0; j < obj.amount; j++) {
                obj.indexes[j] = obj.amount + j;
            }
            level_description.push(obj);
        }
    }

// Where am I?
function FindLevel(node) {
    for (var i = 0; i < level_description.length; i++) {
        for (var j = 0; j < level_description[i].indexes.length; j++) {
            if (node === level_description[i].indexes[j]) {
                return level_description[i].level; 
            }
        }
    }
}

var level = FindLevel(node);
console.log("You are on: ", level, "level");

var lv_under = levels - level; 
console.log("Under there are: ", lv_under, "levels");

var lv_above = levels - lv_under - 1; //Dont count lv on which obj is
console.log("Above there are: ", lv_above, "levels");

// Path above
var path_above = [];
path_above[0] = "APPLICATION";

node_copy = node;

for (var i = lv_above; i > 0; i--) {
    path_above[i] = "Object_" + Math.floor(node_copy/(2).toString());
    node_copy = node_copy/2;
}
//console.log(path_above);

// + level where object is 
path_above[path_above.length] = "Object_" + node.toString();
console.log(path_above);

// Path_under
var level_indexes = [];
node_copy = node;

function Find_indexes(node_copy) {
    for (var i = 0; i < lv_under; i++) { // ile poziomow?
        
        var indexes = [];
        
        for (var j = 0; j < Math.pow(2, i + 1); j++) { //ile indexow na poziomie?
            indexes[j] = node_copy * 2 + j;
        }

    level_indexes[i] = [].concat(indexes);
    node_copy *= 2;
    
    }
    return level_indexes;
}

level_indexes = Find_indexes(node_copy);

Funkcja Find_indexes daje mi informacje o wszystkich ideksach na poziomach poniżej node.

I tutaj niestety utknąłem. Potrzebuję napisać funkcje, która wykorzysta informację z Find_indexes i zwróci tablice wszystkich możliwych ścieżek poniżej node

Napisałem coś takiego:

var path_under = [];

function path_possibilities(level_indexes) {

    var path_possi = [];

    for (var i = 0; i < level_indexes.length; i++) { 
        
        var arr = [];
        
       if (i === 0) {
           path_possi[i] = "Object_" + level_indexes[0][0].toString();
           path_possi[i + 1] = "Object_" + level_indexes[0][1].toString();
      }
      else {
           //Tutaj wielu rzeczy próbowałem ale mimo wszystko utknałem
                
        }
      
       
    }
    return path_possi;
}

path_under = path_possibilities(level_indexes);

ale niestety ta funkcja nie jest skończona i mam z nią problem.

Będę wdzięczny za każdy rodzaj pomocy. Pozdrawiam.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 348 wizyt
0 głosów
2 odpowiedzi 1,458 wizyt
pytanie zadane 17 stycznia 2018 w C i C++ przez k222 Nałogowiec (30,150 p.)
0 głosów
2 odpowiedzi 1,220 wizyt
pytanie zadane 24 sierpnia 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

93,631 zapytań

142,555 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...