{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", " Implémenter un arbre avec un dictionnaire\n", "
\n", "


" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

I. Première possibilité


" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On désire implémenter un arbre avec un dictionnaire. \n", "Par exemple pour l'arbre ci-dessous on aurait : " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "exemple_1 = {\"B\": [\"D\", \"E\"], \"D\": [None, \"G\"], \"E\": [None, None], \"G\": [None, None] }" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "![image.png](attachment:image.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On propose les fonctions suivantes" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def cree_arbre(racine):\n", " return {racine:[None, None]} \n", "\n", "def cree_fils_gauche(arbre, parent, valeur):\n", " arbre[parent][0] = valeur\n", " \n", "def cree_fils_droit(arbre, parent, valeur):\n", " arbre[parent][1] = valeur" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nous allons tester ces fonctions :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "arbre = cree_arbre(\"A\")\n", "print(arbre)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "cree_fils_gauche(arbre,\"A\", \"B\")\n", "print(arbre)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Quel est le problème ?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Réponse : \n", "

\n", " \n", "\n", "Le noeud \"B\" n'apparaît pas comme clé dans le dictionnaire.\n", " \n", "

\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", " 💻 A vous de jouer 1 : \n", "\n", "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recopier et modifier le script ci-dessous pour remédier à ce problème." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# A vous de jouer\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Testez votre code ci-dessous" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "arbre = cree_arbre(\"A\")\n", "cree_fils_gauche(arbre, \"A\", \"B\")\n", "cree_fils_droit(arbre, \"A\", \"C\")\n", "cree_fils_gauche(arbre, \"B\", \"D\")\n", "cree_fils_droit(arbre, \"D\", \"G\")\n", "cree_fils_gauche(arbre, \"C\", \"F\")\n", "cree_fils_droit(arbre, \"B\", \"E\")\n", "print(arbre)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

II. Amélioration


" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nous voulons que le dictionnaire soit encore plus explicite. Nous allons remplacer les listes par des dictionnaires ayant les clés `fg` et `fd` pour respectivement le fils à gauche et le fils à droite.\n", "Pour l'exemple du début, au lieu de : \n", "`exemple_1 = {\"B\": [\"D\", \"E\"], \"D\": [None, \"G\"], \"E\": [None, None], \"G\": [None, None] }` \n", "Nous voulons : \n", "`exemple_2 = {\"B\": {\"fg\": \"D\", \"fd\": \"E\"} , \"D\": {\"fg\": None, \"fd\": \"G\"} , \"E\": {\"fg\": None, \"fd\": None} ,\n", "\"G\":{\"fg\": None, \"fd\": None} }`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", " 💻 A vous de jouer 2 : \n", "\n", "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recopier et modifier votre script ci-dessous" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# A vous de jouer\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "arbre = cree_arbre(\"A\")\n", "cree_fils_gauche(arbre, \"A\", \"B\")\n", "cree_fils_droit(arbre, \"A\", \"C\")\n", "cree_fils_gauche(arbre, \"B\", \"D\")\n", "cree_fils_droit(arbre, \"D\", \"G\")\n", "cree_fils_gauche(arbre, \"C\", \"F\")\n", "cree_fils_droit(arbre, \"B\", \"E\")\n", "print(arbre)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "😊 On pourrait ajouter la clé `'parent'` à notre dictionnaire :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def cree_arbre(racine):\n", " return {racine:{'parent': None, 'fg': None, 'fd': None}}\n", "\n", "def cree_fils_gauche(arbre, parent, valeur):\n", " arbre[parent]['fg'] = valeur\n", " arbre[valeur] = {'parent': parent, 'fg': None, 'fd': None}\n", "\n", "def cree_fils_droit(arbre, parent, valeur):\n", " arbre[parent]['fd'] = valeur\n", " arbre[valeur] = {'parent': parent, 'fg': None, 'fd': None}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "arbre = cree_arbre(\"A\")\n", "cree_fils_gauche(arbre, \"A\", \"B\")\n", "cree_fils_droit(arbre, \"A\", \"C\")\n", "cree_fils_gauche(arbre, \"B\", \"D\")\n", "cree_fils_droit(arbre, \"D\", \"G\")\n", "cree_fils_gauche(arbre, \"C\", \"F\")\n", "cree_fils_droit(arbre, \"B\", \"E\")\n", "print(arbre)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "---\n", "\n", "**Auteurs** Jean-Louis Thirot et Mireille Coilhac\n", "\n", "Publié sous licence CC BY-NC-SA\n", "\n", "\n", "---\n", "\"Creative
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. \n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 2 }