如何在Golang中实现二叉树的中序遍历

How to implement Inorder Traversal in a Binary Tree in Golang

我正在尝试在 Golang 中实现一个简单的二叉树,以便理解 class 中教授的概念。

我对 Golang 有点陌生,但与此同时,我很难理解递归的概念以及在何处插入下一个节点。

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)
}

我得到的输出是:

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

预期的输出应该是:

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

非常感谢任何帮助。

此代码将在右侧插入重复项。您可能希望忽略重复项(带有注释行)。

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)
        }
    }
}