
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!
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
- Breath-First Tree Traversal
- DotNetFiddle snippet
- All my Project Euler solutions in F#
- All my Advent of Code solutions in F#
Whenever you’re ready, here are 3 ways I can help you:
- 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.
- 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.
- Join my community on Discord, ask questions, and join the discussion on all things AWS and Serverless.