123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package main
- // MyNode ...
- type MyNode struct {
- Node *TreeNode
- Level int
- }
- /**
- * Definition for a binary tree node.
- * type TreeNode struct {
- * Val int
- * Left *TreeNode
- * Right *TreeNode
- * }
- */
- func levelOrder(root *TreeNode) [][]int {
- result := [][]int{}
- stack := []MyNode{}
- curr := root
- top := -1
- level := 0
- for curr != nil || top > -1 { // Inorder traversal
- for curr != nil {
- stack = append(stack, MyNode{curr, level})
- top++
- curr = curr.Left
- level++
- }
- if top > -1 {
- curr = stack[top].Node
- level = stack[top].Level
- stack = stack[:top]
- top--
- for len(result) <= level {
- result = append(result, []int{})
- }
- result[level] = append(result[level], curr.Val)
- curr = curr.Right
- level++
- }
- }
- return result
- }
- // func main() {
- // // 1
- // // /
- // // 2
- // // / \
- // // 3 4
- // n4 := TreeNode{4, nil, nil}
- // n3 := TreeNode{3, nil, nil}
- // n2 := TreeNode{2, &n3, &n4}
- // n1 := TreeNode{1, &n2, nil}
- // fmt.Println(levelOrder(&n1))
- // }
|