UBIGraph

import xmlrpclib
import random

class Node:
    def __init__(self,num):
        self.num = num
        self.left = None
        self.right = None
    def get_right(self):
        return self.right
    def set_right(self,node):
        self.right = node
    def get_left(self):
        return self.left
    def set_left(self,node):
        self.left = node
    def num(self):
        self.num

current_num = 0
def add(node):
    global current_num
    if random.randint(0,1)==0:
        print("right")    
        if node.get_right() is None:
            current_num+=1
            node.set_right(Node(current_num))
            UbiG.new_vertex_w_id(current_num)
            UbiG.new_edge(node.num,current_num)
        else:
            add(node.get_right())
    else:
        print("left")
        if node.get_left() is None:
            current_num+=1
            node.set_left(Node(current_num))
            UbiG.new_vertex_w_id(current_num)
            UbiG.new_edge(node.num,current_num)
        else:
            add(node.get_left())

random.seed(None)
server_url = "http://127.0.0.1:20738/RPC2"
server = xmlrpclib.Server(server_url)
UbiG = server.ubigraph
UbiG.clear()
root = Node(current_num)
UbiG.new_vertex_w_id(root.num)

while 1:
    raw_input("please enter")
    print("call add")
    add(root)

binary-tree生成の自作サンプルです。
enter押しまくったらぽんぽん増えます。


UBIGraphでgを押して重力を有効にしてやるとある程度奇麗に見えます。
後完全にpython忘れ去ってるのでコードはunkすぎて目が覆いたく成るぐらいですがご了承ください。


一応何をやっているかというと、uniqueなidをnode毎に割り当てて、そいつでそのままvertexを作成。
そんでもって、自分と親ノードを繋いでいるだけです。