Binääripuun piirtäminen (Python)

Binääripuun rakenteen hahmottaminen on vähintäänkin vaikeaa katsomalla koodia, joka muodostaa binääripuun.

Apuun tulee seuraava koodi, joka piirtää binääripuun turtle-kirjaston avulla. Kuten muutkin binääripuuhun liittyvät asiat, piirtäminen onnistuu kätevästi rekursion avulla.

from turtle import *
from collections import namedtuple

Node = namedtuple("Node",["left","right"])

def count(node):
    if not node:
        return 0
    return count(node.left)+count(node.right)+1

def draw_tree(node,x,y):
    if not node:
        return
    goto(x,y)
    stamp()
    if node.left:
        draw_tree(node.left,x-(count(node.left.right)+1)*30,y-40)
        goto(x,y)
    if node.right:
        draw_tree(node.right,x+(count(node.right.left)+1)*30,y-40)
        goto(x,y)

# tässä on binääripuu, joka halutaan piirtää
tree = Node(
    Node(Node(None,None),Node(None,None)),
    Node(Node(None,None),Node(None,None))
)

shape("circle")
draw_tree(tree,0,0)
done()