Skip to content

Instantly share code, notes, and snippets.

@alldroll
Last active July 1, 2020 20:47
Show Gist options
  • Select an option

  • Save alldroll/4fc8a58eca65b7b19e9c3113c01cb2e6 to your computer and use it in GitHub Desktop.

Select an option

Save alldroll/4fc8a58eca65b7b19e9c3113c01cb2e6 to your computer and use it in GitHub Desktop.
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
type OrderNode struct {
node *TreeNode
order int
}
func verticalOrder(root *TreeNode) [][]int {
if root == nil {
return [][]int{}
}
order := make(map[int][]int)
from, to := (1 << 31) - 1, -1 << 31
queue := []*OrderNode{{
node: root,
order: 0,
}}
for len(queue) > 0 {
item := queue[0]
queue = queue[1:]
order[item.order] = append(order[item.order], item.node.Val)
if item.node.Left != nil {
queue = append(queue, &OrderNode{
node: item.node.Left,
order: item.order - 1,
})
}
if item.node.Right != nil {
queue = append(queue, &OrderNode{
node: item.node.Right,
order: item.order + 1,
})
}
from, to = min(from, item.order), max(to, item.order)
}
result := [][]int{}
for ; from <= to; from++ {
row := order[from]
result = append(result, row)
}
return result
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func max(a, b int) int {
if a < b {
return b
}
return a
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment