Leetcode Note: Go - N-Ary Tree Postorder Traversal
N-ary Tree Postorder Traversal - LeetCode
https://leetcode.com/problems/n-ary-tree-postorder-traversal/
- Go 言語で取り組んだメモ
所感
- linked list の nodeを post order traversal して int 配列で return する
- node の末端から value を集めていく
回答
Go: Iterative solution (using list) - LeetCode Discuss https://leetcode.com/problems/n-ary-tree-postorder-traversal/discuss/549341/Go%3A-Iterative-solution-(using-list)
/**
* Definition for a Node.
* type Node struct {
* Val int
* Children []*Node
* }
*/
func postorder(root *Node) []int {
res := []int{}
if root == nil {
return res
}
stack := list.New()
stack.PushFront(root)
for stack.Len() > 0 {
curr := stack.Remove(stack.Front()).(*Node)
if curr != nil {
res = append(res, curr.Val)
}
for i := 0; i < len(curr.Children) ; i++ {
stack.PushFront(curr.Children[i])
}
}
reverse(res)
return res
}
func reverse (s []int) {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
}
- golang では container/list パッケージで提供されている list が stack として使える
- stack に root node を格納
- node が存在する間ループを行い、走査した value を res に push していき return 直前で反転する