Софтуерно Инженерство
Loading...
+ Нов въпрос
plamen_vihren avatar plamen_vihren 2 Точки

09. C++ OOP Pure Virtual Members and Multiple Inheritance (Task 4 Tree)

Zdravejte,

Molq da byda prosten za tova che pisha na latinica - no tuk sym s 10 prysta.

Reshenieto mi e 10713780, account plamen_vihren.

Qsno mi e che traverse algorithm moje da byde ot vida:

void print (TreeNode* node){

 if (node!=nullptr){

 cout<<node->data<<endl;

print(node->left);

print (node->right);

}

}

Tozi algorithm e za binarno dyrvo, no samo s edin call se prepravq za tozi sluchaj.

Problemcheto mi e slednoto vyv funkciqta getTreeView(rootObject) Vie vryshtate samo ROOT nodovete, za da prodylja obache na men mi trqbva vidimost ot gore no dolu, a chrez Parent, e realizirana vidimost ot dolu na gore. Kak da slezna pone edno nivo na dolu, kato v posochenata funkciq dostyp do cqlata baza nqmam. Ako ima dostyp do vsichki elementi e lesno vzimash obekta i dokato ne e null pointer se razhojdash na gore kym parenta.

Kak s kakyv mehanism da slezna pone edno nivo na dolu????????????????

 

S uvajenie Plamen Nikolaev 

Blagodarq predvaritelno na vseki kojto proqvi dobra volq da obyrne vnimanie na moeto pitane ,

Тагове:
0
C++ Advanced
j.petrov_90 avatar j.petrov_90 118 Точки

Привет, Пламен,

Правилно разсъждаваш. Да започна с това.
Добавям само, че в задачата не става въпрос за бинарно дърво, а за К-дърво (т.е. един parent може да има повече от 2 child-а).
На компютъра като си направиш папка вътре можеш да имаш повече от 2 файла, нали?
Ти си го споменал, разбира се ... просто пояснявам.

Грешиш, обаче, че в задачата не ви е даден механизъм да се "ходи" надолу по дървото.
Абстрахирам се за момент от задачата за ти обясня как работи едно принципно обхождане на файлова структура(дърво)

Малко pseudo-code:
fun traverseTree(tree){
  while(tree = tree->next){
    //skip parent node
    if(tree == parent(tree)) continue;

    //skip current directory file - otherwise an endless loop will occur
    if(tree == currentDir) continue;

    //found file is a directory -> traverse it
    if(isDirectory(tree)) traverseTree(tree) ;
   
    //found normal file (not a directory)
    processFile(tree);
  }
}

Обикновенно като работим с дървета (в случая файлова система) - работим с рекурсия!

С две думи:
- Всичко в една файлова система е представено като файлове;
- Папките пак са файлове;
- Папките са маркирани със специален флаг, за да се знае, че освен файлове - те са и папки.
- Всяка папка освен списък със своите файлове - си има е parent node (освен истинския root - той пак си има parent node де, просто е nullptr).

Сега дай да се върнем към задачата.
Всяка папка трябва да ти е маркирана като "файл" и като "папка".
Как? С помощта на Interface-ите, които са ви предоставени в скелета.

Как да слезем надолу по дървото?
Ами root-а ни е папка. Всяка папка може да вземе своите файлове.
В задачата имате дадени 2 interface-ни функции за iterator-и begin() и end() на папката.
От begin() и end() итератори се сещам поне за няколко начина как да си вземеш елементите :)
Зависи вече каква структура си избрал да ползваш.

Малко жокери можеш до ползваш и темата на колегата за същата задача:
https://softuni.bg/forum/26191/cplusplus-advanced-04-tree-gettreeview-funkciyata

Само внимавай, че теб те пренасочвам натам, а него го пренасочвам на тук. Да не стане някоя безкрайна рекурсия и да гръмне със stack overflow :)

Поздрави

0
24/03/2019 19:00:09