Let’s say I have a binary tree data structure defined as follows
type 'a tree =
| Node of 'a tree * 'a * 'a tree
| Nil
I have an instance of a tree as follows:
let x =
Node
(Node (Node (Nil,35,Node (Nil,40,Nil)),48,Node (Nil,52,Node (Nil,53,Nil))),
80,Node (Node (Nil,82,Node (Nil,83,Nil)),92,Node (Nil,98,Nil)))
I’m trying to pretty-print the tree into something easy to interpret. Preferably, I’d like to print the tree in a console window like this:
_______ 80 _______
/ \
_ 48 _ _ 92 _
/ \ / \
35 52 82 98
\ \ /
40 53 83
What’s an easy way to get my tree to output in that format?
If you want it to be very pretty, you could steal about 25 lines of code from this blog entry to draw it with WPF.
But I’ll code up an ascii solution shortly too, probably.
EDIT
Ok, wow, that was hard.
I’m not certain it’s entirely correct, and I can’t help but think there’s probably a better abstraction. But anyway… enjoy!
(See the end of the code for a large example that is rather pretty.)