Skip to content

Instantly share code, notes, and snippets.

@armanbilge
Created July 21, 2015 13:03
Show Gist options
  • Save armanbilge/4f3537d60bf2acefa5b0 to your computer and use it in GitHub Desktop.
Save armanbilge/4f3537d60bf2acefa5b0 to your computer and use it in GitHub Desktop.
type Node
label::String
height::Float64
parent::Node
left::Node
right::Node
end
Node(label::String, height::Float64) = Node(label, height, None, None, None)
type Tree
root::Node
origin::Float64
end
isroot(node::Node) = node.parent == None
isleaf(node::Node) = node.left == None
function preorder(node::Node)
produce(node)
if !isleaf(node)
for n in Task(preorder(n.left))
produce(n)
end
for n in Task(preorder(n.right))
produce(n)
end
end
end
postorder(tree::Tree) = postorder(tree.root)
postorder(tree::Tree) = postorder(tree.root)
function newick(node::Node)
if isleaf(node)
node.label
else
"(" * newick(node.left) * "," * newick(node.right) * ")"
end *
":" * string(if isroot(node) 0 else node.parent.height - node.height end)
end
function newick(tree::Tree)
newick(tree.root) * ":" * string(tree.origin - node.root.height) * ";"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment