Kurssiaiheen 8 tehtävät

Puut

Tarkastele alla olevaa puuta, ja vastaa seuraaviin kysymyksiin tämän puun perusteella. (Lisää tietoa puista löytyy esimerkiksi kurssiaiheen 8 luentomateriaaleista):

Huomaa. Kirjoita vastaukset pienillä kirjaimilla, aakkosjärjestyksessä ja käytä pilkkua kohteiden erottelussa.

../../../_images/puu-vh.png
Mikä on tämän puun juuri?
Mitkä ovat tämän puun lehdet?
Mikä on tämän puun korkeus?
Kuinka monta alipuuta löytyy tästä puusta? (Laske myös itse puu mukaan summaan)

C++ structeja yllä olevalle puun solmulle

Seuraavissa kahdessa tehtävässä sinun tulee valita esitetyistä C++ structeista ne, joita voidaan käyttää yllä esitetyn puun solmuina.

Huomaathan, että tehtävissä tulee olettaa, että annetun structin lisäksi muu koodi ei sisällä structeja tai luokkia. Ja lisäksi huomioi, että solmussa täytyy tallettaa solmun sisältämä tieto oikealla tietotyypillä.

Struct A

1
2
3
4
5
struct Node {
   Node* parent = nullptr;
   char value;
   std::unordered_set<Node*> children = {};
};

Struct B

1
2
3
4
struct {
   char value;
   std::vector<Node*> children
};

Struct C

1
2
3
4
5
struct TreeNode {
   char data;
   Node* leftChild = nullptr;
   Node* rightChild = nullptr;
};

Struct D

1
2
3
4
5
struct Node {
   Node* parent = nullptr;
   char value;
   std::vector<Node*> children = {};
};

Struct E

1
2
3
4
5
struct TreeNode {
   char data;
   TreeNode* leftChild = nullptr;
   TreeNode* rightChild = nullptr;
};
Katso yllä esitettyjä C++-structeja. Mitä niistä voidaan käyttää yllä olevan puun solmuna?

Struct F

1
2
3
4
5
struct Node {
   char data;
   Node* leftChild = nullptr;
   Node* rightChild = nullptr;
};

Struct G

1
2
3
4
5
struct Node {
   Node* parent;
   Node* data;
   std::pair<Node*,Node*> children;
};

Struct H

1
2
3
4
5
struct Node {
   Node* parent;
   double data;
   std::pair<Node*,Node*> children;
};

Struct I

1
2
3
4
5
struct Node {
   Node* parent;
   char data;
   std::pair<Node*,Node*> children;
};

Struct J

1
2
3
4
5
struct Node {
   Node* parent;
   bool data;
   std::pair<Node*,Node*> children;
};
Katso yllä esitettyjä C++-structeja. Mitä niistä voidaan käyttää yllä olevan puun solmuna?

Esijärjetys

[JSAV Placeholder: tree_preorder]

Välijärjestys

[JSAV Placeholder: tree_inorder]

Jälkijärjestys

[JSAV Placeholder: tree_postorder]

Iteraattoreiden mitätöityminen

Kaikki kolme alla olevaa (rikkinäistä) funktiota löytyvät päivitetystä reposta hakemistosta wk04_trees/iterator_invalidation. Funktioita ja graderien ajamia testejä voi ajaa myös paikallisesti, se onnistuu Qt Creatorin kanssa vaihtamalla komentojonoparametrit ja komentojonoa käyttäen antamalla parametrit ohjelmaa ajettaessa. Jos jätät parametrit antamatta, ajetaan tällöin kaikki testit.

Jos haluat testata ensimmäistä funktiota siihen liitetyllä testillä 2, vaihda komentojonoparametreiksi 1 2. Jos taas haluat testata toista funktiota siihen liitetyllä testillä 3 (satunnaiset arvot) kahdenkymmenen alkion sisääntulovektorilla vaihda komentojonoparametreiksi 2 3 20.

Koon määrittelevä (eli kolmas numero) komentojonoparametri ei ole pakollinen eikä vaikuta kaikkiin testeihin, oletuksena koko on 10. Kaksi ensimmäistä parametria ovat pakollisia, jos yrität ajaa jollekin funktiolle testiä, jota ei ole olemassa, ohjelma tulostaa tästä virheen.

Komentojonoparametrien vaihto Qt Creatorissa

Komentojonoparametrit voi vaihtaa Qt Creatorissa valitsemalla ensin vasemmasta laidasta jakoavaimen kuvan projects, sen alta Build & Run alta run. Nyt auki olevasta listasta löytyy Command line arguments. Voit kopioida komentojonoparametrit (esimerkiksi 1 2) tuohon tekstikenttään.

Iteraattoreiden mitätöityminen 1, ascendingVector (suom.) kasvavaVektori

Funktio ascendingVector luo vektorin jossa on kasvavassa järjestyksessä luvut 0 - (n-1). Korjaa se, työnnä muutokset git-repoon ja lähetä se arvosteltavaksi. Vastauksesi tulee olla tiedostossa wk04_trees/iterator_invalidation/invalidation1.cc

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.

Iteraattoreiden mitätöityminen 2, eraseEverySecond (suom.) poistaJokaToinen

Funktio eraseEverySecond poistaa viitteenä annetusta vektorista joka toisen alkion. Esimerkki: {1, 2, 3, 4} -> {1, 3} Korjaa se, työnnä muutokset git-repoon ja lähetä se arvosteltavaksi. Vastauksesi tulee olla tiedostossa wk04_trees/iterator_invalidation/invalidation2.cc

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.

Iteraattoreiden mitätöityminen 3, duplicateEvenRemoveUneven (suom.) toistaParillinenPoistaPariton

Funktio duplicateEvenRemoveUneven nimensä mukaisesti poistaa parittomat luvut ja duplikoi/toistaa/kopioi parilliset luvut viitteenä annetussa vektorissa. Esimerkki: {1, 2, 3, 4} -> {2, 2, 4, 4} Korjaa se, työnnä muutokset git-repoon ja lähetä se arvosteltavaksi. Vastauksesi tulee olla tiedostossa wk04_trees/iterator_invalidation/invalidation3.cc

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.