Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Bäume zeichnen

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.09.2012
    Beiträge
    98

    Bäume zeichnen

    Hallo

    Ich konnte in latex erfolgreich einen Baum mit Knoten zeichnen, allerdings habe ich 3 Probleme, die ich nicht lösen kann (Siehe Screenshot im Anhang).

    1. Ich bekomme die Nummerierung der Knoten 1,2,... nicht hin.

    2. Ich bekomme die geschrichtelte Linien zwischen den zwei Bäumen nicht hin.

    3. Ich bekomme den Pfeil nicht hin, bzw. der linke und der rechte Baum sollten durch den Pfeil verbunden werden, also alles sollte eine Grafik sein (oder vielleicht als zwei figures machen?).

    Kann da jemand helfen?

    Einen schönen Abend wünsche ich.

  2. #2
    Registrierter Benutzer
    Registriert seit
    06.08.2008
    Beiträge
    1.015
    Gib jedem Knoten (node), den du im Baum zeichnest, auch einen Bezeichner in runden Klammern mit. Damit werden die Koordinaten des Knoten unter diesem Bezeichner gespeichert.

    Dann kannst du auch nachträglich mit draw noch Linien von Bezeichner zu Bezeichner ziehen oder auch neue Knoten mit anderer Beschriftung (und event. anchor=south o.ä.) an die ursprünglichen Koordinaten setzen. Siehe hier und hier mit Bildern.
    Geändert von hakaze (12-11-2012 um 15:16 Uhr) Grund: link update

  3. #3
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,
    warum gibst du kein Minimabeispiel an, d.h. zeigst wie du den Baum selbst gezeichnet hast? Du gibst ja nicht mal an, ob du tikz dazu verwendest.
    Hier ist trotzdem ein Vorschlag mit tikz:
    Code:
    \documentclass{standalone}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}[%
        every node/.style={draw,circle,inner sep=1pt},
        every label/.style={font=\scriptsize,draw=none}]
      \node[label=above:1](1A){A}
        child{node[label=above:2]{C}
          child{node[label=above left:4]{D}}}
        child{node[label=above:3](1B){B}};
      \node[xshift=4cm,label=above:1](2A){A}
        child[missing]
        child{node[label=above:2](2B){B}}
        child{node[label=above:3]{C}}
        child{node[label=above:4]{D}};
      \draw[bend left,dashed](1A)to(2A);
      \draw[bend right,dashed](1B)to(2B);
      \draw[->]([yshift=0.9cm,xshift=0.3cm]1B.east)--([yshift=0.9cm,xshift=-0.3cm]2B.west);
    \end{tikzpicture}
    \end{document}
    Gruß
    Elke

  4. #4
    Registrierter Benutzer
    Registriert seit
    23.09.2012
    Beiträge
    98
    Sorry, ich hatte ihn in tikz gezeichnet.

    Vielen Dank. Das ist perfekt. Wie ich schon sagte, du bist meine Heldin.

    Edit: Es ist doch noch ein Problem aufgetaucht. Ich habe folgenden Code.

    Code:
    \begin{tikzpicture}[%
        every node/.style={draw,circle,inner sep=1pt}]
      \node{A}
        child{node{B}
          child{node{C}}
          child{node{D}}
          child{node{E}}}
        child{node{F}
          child{node{G}}
          child{node{H}}};
    \end{tikzpicture}
    Das Resultat ist im Anhang. Wie kann man da verhindern, dass sich die Kanten so unschön überschneiden?
    Geändert von Helveticus (15-11-2012 um 12:04 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.09.2012
    Beiträge
    98
    Ich bin schon wieder ratlos. Ich hab folgendes.

    Code:
    \begin{tikzpicture}[%
        every node/.style={draw,circle,inner sep=1pt}]
      \node{A}
        child{node{B}
          child{node{C}}
          child{node{D}}}
        child{node{E}
          child{node{F}}
          child{node{G}}};
    \end{tikzpicture}
    Die gewünschte Darstellung wäre right.jpg, allerdings kriege ich wrong.jpg.

    Was mach ich da falsch? Ich seh den Fehler nicht. Node A enthält ja die Kinder B und E, wobei B ja die Kinder C und D enthält und E die Kinder F und G.

  6. #6
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,

    du kannst für jedes Level einen Abstand vorgeben:

    Code:
    \documentclass{standalone}
    \usepackage{tikz}
    
    \begin{document}
    \begin{tikzpicture}[%
        every node/.style={draw,circle,inner sep=1pt},
        level 1/.style={sibling distance=30mm},
        level 2/.style={sibling distance=15mm}]
      \node{A}
        child{node{B}
          child{node{C}}
          child{node{D}}}
        child{node{E}
          child{node{F}}
          child{node{G}}};
    \end{tikzpicture}
    \end{document}
    Das ist aber im Manual auch ausführlich beschrieben.

    Gruß
    Elke

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •