lctree

package module
v0.0.0-...-a315a08 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 3, 2020 License: ISC Imports: 4 Imported by: 0

README

lctree 🌱

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   

API reference Go Report Card Coverage Status Build Status

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:

tree.png

Contributing

Pull-requests, feature requests and issues are welcome.

License

ISC license

Documentation

Overview

Package lctree provides primitives to serialize and deserialize leetcode trees

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Serialize

func Serialize(t *TreeNode) string

Serialize converts a TreeNode tree into a leetcode serialized tree

Types

type TreeNode

type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

TreeNode is a node

func Deserialize

func Deserialize(tree string) *TreeNode

Deserialize converts a leetcode serialized tree into a TreeNode tree

func (*TreeNode) DOT

func (t *TreeNode) DOT() string

DOT converts a TreeNode tree into Graphviz DOT See: http://www.graphviz.org/documentation/

func (*TreeNode) WalkBreadthFirst

func (t *TreeNode) WalkBreadthFirst(fn WalkBFFn) error

WalkBreadthFirst traverses the tree breadth-first. fn is called on each visited node

func (*TreeNode) WalkDepthFirst

func (t *TreeNode) WalkDepthFirst(fn WalkFn) error

WalkDepthFirst traverses the tree depth-first. fn is called on each visited node

type WalkBFFn

type WalkBFFn func(n *TreeNode, depth int) error

WalkBFFn is the signature of the function called on each node by the function WalkBreadthFirst

type WalkFn

type WalkFn func(n *TreeNode) error

WalkFn is the signature of the function called on each node visited by the function WalkDepthFirst

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL