12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package main
- /**
- * Definition for a binary tree node.
- * type TreeNode struct {
- * Val int
- * Left *TreeNode
- * Right *TreeNode
- * }
- */
- func inorderTraversal(root *TreeNode) []int {
- result := []int{}
- if root == nil {
- return result
- }
- inorderTraversalHelper(root, &result)
- return result
- }
- func inorderTraversalHelper(root *TreeNode, result *[]int) {
- if root.Left != nil {
- inorderTraversalHelper(root.Left, result)
- }
- *result = append(*result, root.Val)
- if root.Right != nil {
- inorderTraversalHelper(root.Right, result)
- }
- }
- func inorderTraversalIter(root *TreeNode) []int {
- result := []int{}
- stack := []*TreeNode{}
- curr := root
- top := -1
- for curr != nil || top > -1 {
- for curr != nil {
- // push
- stack = append(stack, curr)
- top++
- curr = curr.Left
- }
- if top > -1 {
- curr = stack[top]
- // pop
- stack = stack[:top]
- top--
- result = append(result, curr.Val)
- curr = curr.Right
- }
- }
- return result
- }
- // func main() {
- // // 1
- // // /
- // // 2
- // // / \
- // // 3 nil
- // n3 := TreeNode{3, nil, nil}
- // n2 := TreeNode{2, &n3, nil}
- // n1 := TreeNode{1, &n2, nil}
- // fmt.Println(inorderTraversalIter(&n1))
- // }
|