2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
56
Task/Tree-traversal/Elixir/tree-traversal.elixir
Normal file
56
Task/Tree-traversal/Elixir/tree-traversal.elixir
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
defmodule Tree_Traversal do
|
||||
defp tnode, do: {}
|
||||
defp tnode(v), do: {:node, v, {}, {}}
|
||||
defp tnode(v,l,r), do: {:node, v, l, r}
|
||||
|
||||
defp preorder(_,{}), do: :ok
|
||||
defp preorder(f,{:node,v,l,r}) do
|
||||
f.(v)
|
||||
preorder(f,l)
|
||||
preorder(f,r)
|
||||
end
|
||||
|
||||
defp inorder(_,{}), do: :ok
|
||||
defp inorder(f,{:node,v,l,r}) do
|
||||
inorder(f,l)
|
||||
f.(v)
|
||||
inorder(f,r)
|
||||
end
|
||||
|
||||
defp postorder(_,{}), do: :ok
|
||||
defp postorder(f,{:node,v,l,r}) do
|
||||
postorder(f,l)
|
||||
postorder(f,r)
|
||||
f.(v)
|
||||
end
|
||||
|
||||
defp levelorder(_, []), do: []
|
||||
defp levelorder(f, [{}|t]), do: levelorder(f, t)
|
||||
defp levelorder(f, [{:node,v,l,r}|t]) do
|
||||
f.(v)
|
||||
levelorder(f, t++[l,r])
|
||||
end
|
||||
defp levelorder(f, x), do: levelorder(f, [x])
|
||||
|
||||
def main do
|
||||
tree = tnode(1,
|
||||
tnode(2,
|
||||
tnode(4, tnode(7), tnode()),
|
||||
tnode(5, tnode(), tnode())),
|
||||
tnode(3,
|
||||
tnode(6, tnode(8), tnode(9)),
|
||||
tnode()))
|
||||
f = fn x -> IO.write "#{x} " end
|
||||
IO.write "preorder: "
|
||||
preorder(f, tree)
|
||||
IO.write "\ninorder: "
|
||||
inorder(f, tree)
|
||||
IO.write "\npostorder: "
|
||||
postorder(f, tree)
|
||||
IO.write "\nlevelorder: "
|
||||
levelorder(f, tree)
|
||||
IO.puts ""
|
||||
end
|
||||
end
|
||||
|
||||
Tree_Traversal.main
|
||||
Loading…
Add table
Add a link
Reference in a new issue