Depth-First Tree Traversal in F#

Yan Cui

I help clients go faster for less using serverless technologies.

This article is brought to you by

Neon Serverless Postgres – the database you love, on a serverless platform. Build reliable, scalable applications faster with Neon without needing to migrate production!

Learn More

We looked at breath-first tree traversal earlier today, now let’s take a look at depth-first tree traversal as well.

type Tree<'a> =
| Empty
| Node of value: 'a * left: Tree<'a> * right: Tree<'a>
let traverse (tree : Tree<'a>) =
let rec loop (tree : Tree<'a>) = seq {
match tree with
| Empty -> ()
| Node (value, left, right) ->
yield value
yield! loop left
yield! loop right
}
loop tree
let tree =
Node (1,
Node (2,
Node (4, Empty, Empty),
Node (5, Empty, Empty)),
Node (3,
Node (6,
Node (7, Empty, Empty),
Empty),
Node (8, Empty, Empty)))
// 1
// / \
// 2 3
// / \ / \
// 4 5 6 8
// /
// 7
traverse tree |> Seq.iter (printfn "%d") // 1 2 4 5 3 6 7 8

Here, we loop through the tree starting with the root, yield the value for each of the nodes before recursively traversing down all the left branch first and then the right branch.

 

Try it Yourself

 

Links

Whenever you’re ready, here are 3 ways I can help you:

  1. Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop for quickly levelling up your serverless skills.
  2. I help clients launch product ideas, improve their development processes and upskill their teams. If you’d like to work together, then let’s get in touch.
  3. Join my community on Discord, ask questions, and join the discussion on all things AWS and Serverless.

Leave a Comment

Your email address will not be published. Required fields are marked *