Awesome
<div align="center">lctree :seedling:
lctree provides a CLI and Golang primitives to serialize and deserialize LeetCode binary trees (e.g. "[5,4,7,3,null,2,null,-1,null,9]").
Overview | Getting Started | Contributing
</div>Overview
- Deserialize/Serialize
- Walk Depth-First
- Walk Breadth-First
- Convert to DOT language for visualization
- CLI (see bin/)
Getting Started
Deserialize
package main
import (
"fmt"
"github.com/sbourlon/go-lctree"
)
// Type alias
type TreeNode = lctree.TreeNode
func mySolution(root *TreeNode) {
fmt.Printf("root: %+v\n", root)
return
}
func main() {
tree := lctree.Deserialize("[1,null,2,3]")
mySolution(tree)
}
Output:
root: &{Val:1 Left:<nil> Right:0xc00008e020}
Serialize
package main
import (
"fmt"
"github.com/sbourlon/go-lctree"
)
type TreeNode = lctree.TreeNode
func mySolution() *TreeNode {
return lctree.Deserialize("[1,null,2,3]")
}
func main() {
tree := mySolution()
fmt.Println(lctree.Serialize(tree))
}
Output:
[1,null,2,3]
Walk Depth-First
package main
import (
"fmt"
"github.com/sbourlon/go-lctree"
)
type TreeNode = lctree.TreeNode
func mySolution() *TreeNode {
return lctree.Deserialize("[1,null,2,3]")
}
func main() {
tree := mySolution()
walkFn := func(n *TreeNode) error {
fmt.Printf("%+v\n", n)
return nil
}
tree.WalkDepthFirst(walkFn)
}
Output:
&{Val:1 Left:<nil> Right:0xc00000c0a0}
&{Val:2 Left:0xc00000c0c0 Right:<nil>}
&{Val:3 Left:<nil> Right:<nil>}
Walk Breadth-First
package main
import (
"fmt"
"github.com/sbourlon/go-lctree"
)
type TreeNode = lctree.TreeNode
func mySolution() *TreeNode {
return lctree.Deserialize("[1,null,2,3]")
}
func main() {
tree := mySolution()
walkFn := func(n *TreeNode, depth int) error {
fmt.Printf("depth: %d\t%+v\n", depth, n)
return nil
}
tree.WalkBreadthFirst(walkFn)
}
Output:
depth: 0 &{Val:1 Left:<nil> Right:0xc00000c0a0}
depth: 1 <nil>
depth: 1 &{Val:2 Left:0xc00000c0c0 Right:<nil>}
depth: 2 &{Val:3 Left:<nil> Right:<nil>}
depth: 2 <nil>
depth: 3 <nil>
depth: 3 <nil>
Convert to DOT language for visualization
package main
import (
"fmt"
"github.com/sbourlon/go-lctree"
)
type TreeNode = lctree.TreeNode
func mySolution() *TreeNode {
return lctree.Deserialize("[10,5,15,null,null,6,20]")
}
func main() {
tree := mySolution()
fmt.Println(tree.DOT())
}
Output:
digraph {
graph [ordering="out"];
10;
5;
15;
6;
20;
10 -> 5;
10 -> 15;
15 -> 6;
15 -> 20;
}
then convert into a png picture (e.g. tree.png):
$ dot -Tpng -o tree.png tree.dot
Output:
Contributing
Pull-requests, feature requests and issues are welcome.