Ikechukwu Anude
Ikechukwu Anude

Reputation: 358

How to implement Inorder Traversal in a Binary Tree in Golang

I am trying to implement a simple binary tree in Golang in order to understand concepts being taught in class.

I'm a bit new to Golang but at the same time, I'm having a hard time wrapping my head around the concepts of recursion and where to insert the next node.

package main

import "fmt"

type Node struct {
    data int
    right *Node
    left *Node
}

func main(){

    //driver code

    //this is the root of the tree
    root := Node{data:6}

    //set the data to the int
    //set the right and left pointers to null
    /*
     6
   /   \
 nil   nil

 */

 n1 := Node{data: 8}
 n2 := Node{data: 4}
 n3 := Node{data: 10}
 root.insert(&n1)
 root.insert(&n2)
 root.insert(&n3)

 inorder(&root)

}

func (n *Node) insert(newNode *Node){
    if n.left == nil && newNode.data < n.data {
        fmt.Println("added to the left")
    }else if n.right == nil && newNode.data > n.data {
        fmt.Println("added to the right")
    }else{
        print("recurse")
        n.insert(newNode)
    }
}

func inorder(rt *Node){
    if rt == nil {
        fmt.Print("|")
        return
    }

    inorder(rt.left)
    fmt.Print(rt.data)
    inorder(rt.right)
}

The output I am getting is:

added to the right
added to the left
added to the right
|6|

The expected output should be:

added to the right
added to the left
recurse
added to the right
4 6 8 10

Any help is greatly appreciated.

Upvotes: 1

Views: 510

Answers (1)

AJR
AJR

Reputation: 1661

This code will insert duplicate on the right. You may want to ignore duplicates (with commented out line).

func (n *Node) insert(newNode *Node){
    if newNode.data < n.data {
        if n.left == nil {
            n.left = newNode
        } else {
            n.left.insert(newNode)
        }
    } else {
    //} else if newNode.data > n.data {
        if n.right == nil {
            n.right = newNode
        } else {
            n.right.insert(newNode)
        }
    }
}

Upvotes: 1

Related Questions