[Homework] Trees and Tree-Like Data Structures - Февруари 2016
Здравейте колеги,
ето как видях аз трите задачи от домашното:
https://github.com/vdonchev/Trees-ndTreeLikeDataStructures-Homework
01. Първа задача стана малко по - дълга като код, тъй като за различните под точки, направих различни методи.
Първите 3 точки от условието са 3 ламбди. За 4та пускам един DFS от корена и търся node който е най - дълбоко. След като съм го намерил печатам като тръгвам от него на горе докато не стигна до корена. За 4та точка правя абсолютно същото, DFS и сумирам докато не стигна до сумата, която се търси. След като съм открил нода в който сумата става търсената, печатам пак по същия начин.
Относно последната 5та под точка, направих така че всеки node (дърво) да знае сумата на под дървото на което той е корен. По този начин, така пускам един DFS и проверявам за всеки node каква е сумата на под дървото и ако е правилната - печатам (пак с DFS).
02. По задача две няма какво да се каже, ползвам два помощни класа File и Folder, всеки Folder си знае размера, така че останалото е елементарно.
03. По трета задача бая пописах на хартия докато схвана как работи обратния полски запис и как точно да превърна израз в такъв. За входа написах един regex чаршаф който да раздели операторите от операндите при входа, за да няма значение как точно е подават (с или без разстояния). След това използвайки shunting yard алгоритъма обръщам израза в reversed polish notation, и на края смятам и печатам.
Ако някой има коментари, ще се радвам да ги прочета.
Поздрави!
Ами де факто регекса минава по стринга и търси:
^-?\d+\.?\d* (число с/без десетична запетая и с/без минус което се намира в началото на стринга)
или
(?<=[-+\\*% ])-?\d+\.?\d* (число с/без десетична запетая и с/без минус което е предшествано от един от тези символи: -+\\*% )
или
[\/\+\*\-\/\%\(\)] (операторите + "(" и ")")
или
\d+\.?\d* (число с/без десетична запетая)
и ако открие го замества със същото но + 1 спейс от пред и отзад:
" $0 "
Така се получават повече от един спейс разстояние м/у опеарторите и операндите, но при сплита ги засичиствам.
По скъсих малко регекса, и мисля, че пак работи коректно: