Created
February 16, 2019 19:37
-
-
Save kipcole9/43f9551e3c579a7d33e8daed10359c2c to your computer and use it in GitHub Desktop.
Depth-wise tree walk and execute a function
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Treewalk do | |
@type tree :: {:node, integer(), tree(), tree()} | nil | |
def depth({:node, value, nil, nil}, _fun) do | |
value | |
end | |
def depth({:node, value, nil, right}, fun) do | |
fun.(value, depth(right, fun), nil) | |
end | |
def depth({:node, value, left, nil}, fun) do | |
fun.(value, depth(left, fun), nil) | |
end | |
def depth({:node, value, left, right}, fun) do | |
fun.(value, depth(left, fun), depth(right, fun)) | |
end | |
# The function to be run on each | |
# node of the tree which is passed | |
# the current value, the result of | |
# running the funciton on the left | |
# branch and the result of running | |
# the function on the right branch | |
def adder(a, b, nil) do | |
a + b | |
end | |
def adder(a, b, c) do | |
a + b + c | |
end | |
# Test tess | |
def tree do | |
{:node, | |
1, | |
{:node, 2, | |
{:node, 4, nil, nil}, | |
nil | |
}, | |
{:node, 3, | |
nil, | |
{:node, 4, nil, nil} | |
} | |
} | |
end | |
# run a test, returns 14 | |
def test do | |
depth(tree(), &adder/3) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment