go算法-二叉树

image.png
package main

import "fmt"

//节点
type node struct{
    key int
    left *node
    right *node
}
//构造函数
func NewNode(key int) *node{
    return &node{key:key}
}
//添加节点
func (root *node) Insert(num int) *node{
    if root == nil {
        root := NewNode(num)
        return root
    }
    if root.key >= num {
        if root.left == nil { //左子树
            root.left = NewNode(num)
        } else {
            root.left.Insert(num)
        }
    } else {
        if root.right == nil { //右子树
            root.right = NewNode(num)
        } else {
            root.right.Insert(num)
        }
    }
    return root
}
//中序遍历二叉树
func inOrderTraverse(root *node){
    if root == nil {
        return;
    }
    if root.left != nil {
        inOrderTraverse(root.left)
    }
    fmt.Println(root.key)
    if root.right != nil {
        inOrderTraverse(root.right)
    }
}

func main(){
    //测试6个元素的数组
    arr := [6]int{5,2,1,7,9,3}
    //初始根结点
    root := NewNode(0)
    for _,val := range arr {
        root.Insert(val)
    }
    inOrderTraverse(root);
    
}

image.png

你可能感兴趣的:(go算法-二叉树)