Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save alldroll/8af99a1b43caeacdb719b731eaa38e7a to your computer and use it in GitHub Desktop.

Select an option

Save alldroll/8af99a1b43caeacdb719b731eaa38e7a 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 LevelNode struct {
node *TreeNode
level int
}
func levelOrderBottom(root *TreeNode) [][]int {
order := [][]int{}
if root == nil {
return order
}
queue := []*LevelNode{{root, 0}}
for len(queue) > 0 {
item := queue[0]
queue = queue[1:]
if len(order) <= item.level {
order = append(order, []int{item.node.Val})
} else {
order[item.level] = append(order[item.level], item.node.Val)
}
if item.node.Left != nil {
queue = append(queue, &LevelNode{item.node.Left, item.level + 1})
}
if item.node.Right != nil {
queue = append(queue, &LevelNode{item.node.Right, item.level + 1})
}
}
return reverse(order)
}
func reverse(arr [][]int) [][]int {
for i, j := 0, len(arr) - 1; i < j; i, j = i + 1, j - 1 {
arr[i], arr[j] = arr[j], arr[i]
}
return arr
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment