вывести бинарное дерево на его стороне

Как вы можете напечатать бинарное дерево на своей стороне, чтобы вывод выглядел так?

   __/a
__/  \b
  \   _/c
   \_/ \d
     \e

(Prettier ascii -искусство добро пожаловать)

Вот код, который не совсем работает:

def print_tree(tree):
    def emit(node,prefix):
        if "sequence" in node:
            print "%s%s"%(prefix[:-1],node["name"])
        else:
            emit(node["left"],"%s_/ "%prefix.replace("/ "," /")[:-1].replace("_"," "))
            emit(node["right"],"%s \\ "%prefix.replace("\\ "," \\")[:-1])
    emit(tree,"")    

Что выводит это:

      _/hg19
    _/ \rheMac2
  _/ \mm9
  /\_/bosTau4
  /  \_/canFam2
_/     \pteVam1
 \_/loxAfr3
   \dasNov2

Ползучесть области:было бы отлично, если бы вы могли передать функцию, которая вернет строку для печати любого узла; таким образом, я могу иногда печатать информацию и о узлах, не являющихся -выходными. Таким образом, есть ли у узла что-либо для печати, контролируется функцией, переданной в качестве параметра.

Вот некоторые тестовые -данные в JSON:

{
    "left": {
        "left": {
            "left": {
                "left": {
                    "name": "hg19", 
                    "sequence": 0
                }, 
                "right": {
                    "name": "rheMac2", 
                    "sequence": 1
                }
            }, 
            "right": {
                "name": "mm9", 
                "sequence": 2
            }
        }, 
        "right": {
            "left": {
                "name": "bosTau4", 
                "sequence": 3
            }, 
            "right": {
                "left": {
                    "name": "canFam2", 
                    "sequence": 4
                }, 
                "right": {
                    "name": "pteVam1", 
                    "sequence": 5
                }
            }
        }
    }, 
    "right": {
        "left": {
            "name": "loxAfr3", 
            "sequence": 6
        }, 
        "right": {
            "name": "dasNov2", 
            "sequence": 7
        }
    }
}
16
задан Will 19 June 2012 в 09:05
поделиться