Skip to content

Tree Traversal

Inorder Traversal

Implementation

package main

import "fmt"

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

type ListNode struct {
    Val  int
    Next *ListNode
}

func main() {
    root := &TreeNode{
        Val: 10,
        Left: &TreeNode{
            Val: 20,
            Left: &TreeNode{
                Val: 40,
            },
            Right: &TreeNode{
                Val: 50,
                Left: &TreeNode{
                    Val: 70,
                },
                Right: &TreeNode{
                    Val: 80,
                },
            },
        },
        Right: &TreeNode{
            Val: 30,
            Right: &TreeNode{
                Val: 60,
            },
        },
    }
    inorder(root)
}

func inorder(root *TreeNode) {
    if root != nil {
        inorder(root.Left)
        fmt.Println(root.Val)
        inorder(root.Right)
    }
}

Preorder Traversal

Implementation

package main

import "fmt"

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

type ListNode struct {
    Val  int
    Next *ListNode
}

func main() {
    root := &TreeNode{
        Val: 10,
        Left: &TreeNode{
            Val: 20,
            Left: &TreeNode{
                Val: 40,
            },
            Right: &TreeNode{
                Val: 50,
                Left: &TreeNode{
                    Val: 70,
                },
                Right: &TreeNode{
                    Val: 80,
                },
            },
        },
        Right: &TreeNode{
            Val: 30,
            Right: &TreeNode{
                Val: 60,
            },
        },
    }
    preorder(root)
}

func preorder(root *TreeNode) {
    if root != nil {
        fmt.Println(root.Val)
        preorder(root.Left)
        preorder(root.Right)
    }
}

Post Order Traversal

Implementation

package main

import "fmt"

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

type ListNode struct {
    Val  int
    Next *ListNode
}

func main() {
    root := &TreeNode{
        Val: 10,
        Left: &TreeNode{
            Val: 20,
            Left: &TreeNode{
                Val: 40,
            },
            Right: &TreeNode{
                Val: 50,
                Left: &TreeNode{
                    Val: 70,
                },
                Right: &TreeNode{
                    Val: 80,
                },
            },
        },
        Right: &TreeNode{
            Val: 30,
            Right: &TreeNode{
                Val: 60,
            },
        },
    }
    postorder(root)
}

func postorder(root *TreeNode) {
    if root != nil {
        postorder(root.Left)
        postorder(root.Right)
        fmt.Println(root.Val)
    }
}