Skip to content
Snippets Groups Projects
Verified Commit 0ced0a05 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added the first commit

parents
No related branches found
No related tags found
No related merge requests found
*.pdf
*.html
[submodule "tufte-css"]
path = tufte-css
url = https://github.com/edwardtufte/tufte-css.git
Makefile 0 → 100644
OPTIONS = --filter=pandoc-numbering
OPTIONS += --filter=pandoc-crossref
PDFOPTIONS = --highlight-style kate
PDFOPTIONS += --pdf-engine pdflatex
PDFOPTIONS += --number-sections
PDFOPTIONS += --template=./default.latex
HTMLOPTIONS += -t html5
HTMLOPTIONS += -c tufte-css/tufte.css
HTMLOPTIONS += --self-contained
HTMLOPTIONS += --mathjax=MathJax.js
MD=$(wildcard *.md)
HTML=$(MD:%.md=%.html)
PDF=$(MD:%.md=%.pdf)
all: $(HTML) $(PDF)
%.pdf: %.md Makefile
pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $<
%.html: %.md Makefile
pandoc -s $(OPTIONS) $(HTMLOPTIONS) -o $@ $<
deploy: all
mkdir -p prog_seq_c_tp/calculator
cp calculator.html prog_seq_c_tp/calculator/index.html
cp calculator.pdf prog_seq_c_tp/calculator/calculator.pdf
clean:
rm -rf *.html *.pdf
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML")
document.getElementsByTagName("head")[0].appendChild(fileref)
---
author:
- Arbre binaire de recherche
title: Cours de programmation séquentielle
autoSectionLabels: false
autoEqnLabels: true
eqnPrefix:
- "éq."
- "éqs."
chapters: true
numberSections: false
chaptersDepth: 1
sectionsDepth: 3
lang: fr
documentclass: article
papersize: A4
cref: false
urlcolor: blue
toc: false
---
# Préambule
Cette série n'est pas notée.
Comme pour le premier semestre, vous pouvez obtenir un bonus de `0.5` sur la note de l'examen
en rendant 2/3 des exercices non-notés du semestre. Vous devez mettre le lien de votre repo
`git` dans le wiki correspondant sur `Cyberlearn`. **Ne nous rajoutez pas comme reporter!**
Vous pouvez à choix laisser le repo public ou alors le mettre en interne.
Pour la partie de compréhension écrivez vos réponses dans un fichier `ANSWERS.md`
et placez le dans votre repo `git`.
# Buts
Dans ce travail vous verrez les concepts suivants:
* Créer et utiliser une librairie d'arbre binaire de recherche d'entiers.
* Utilisation des pointeurs.
* Utilisation de fonctions récursives.
Vous avez vu la théorie sur les arbres binaires de recherche avec le Professeur
Albuquerque.
# Énoncé
Dans ce travail pratique utilisez la technique de développement pilotée par des
tests pour écrire une librairie d'arbre binaire de recherche.
Chaque noeud d'un arbre binaire de recherche d'entiers est est une structure du
type
```C
typedef struct _node_t {
int val;
struct _node_t *left;
struct _node_t *right;
} node_t;
```
Pour manipuler cette structure vous devez implémenter un certain nombre de
fonctions **uniquement de façon récursive**.
```C
// Fonctions de création, destruction et affichage
node_t *bst_create(); // création d'un arbre vide (retourne NULL)
void bst_destroy(node_t *tree); // détruit l'arbre et vide la mémoire
void bst_print(node_t *tree); // adffiche l'arbre (voir plus bas)
// vérifie si l'arbre est vide
bool bst_is_empty(node_t *tree);
// insertion de val dans l'arbre
node_t *bst_insert(node_t *tree, int val);
// efface le premier élément contenant la valeur val
l'arbre
node_t *bst_delete(node_t *tree, int val);
// la valeur val est-elle présente dans l'arbre?
bool bst_is_present(node_t *tree, int val);
// l'arbre est-il un arbre binaire de recherche?
bool bst_is_bst(node_t *tree);
// retourne le noeud avec la valeur minimale de l'arbre
node_t *bst_find_min_node(node_t *tree);
// retourne la valeur la plus petite stockée dans l'arbre
int bst_find_min(node_t *tree);
// retourne le noeud avec la valeur maximale de l'arbre
node_t *bst_find_max_node(node_t *tree);
// retourne la valeur la plus grande stockée dans l'arbre
int bst_find_max(node_t *tree);
```
---
Remarque #
Vous devrez probablement écrire d'autres fonctions "utilitaires"" dans votre
librairie mais les fonctions ci-dessus sont celles que vous exposerez à
l'utilisatrice.
---
Vous devrez également écrire un programme qui génère $N$ nombres aléatoires et
qui construit un arbre binaire de recherche. Il faut ensuite afficher les
nombres triés en parcourant l'arbre par un parcours symétrique (ou infixé).
Pour chaque nombre affiché il faudra aussi donner le niveau sur lequel il se
trouve dans l’arbre.
Subproject commit e225f3a0e5f8f42a1d28416c1c85962411711907
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment