二叉树golang实现

程序员卷不动了 2023-03-08 AM 587℃ 0条

二叉树是一种常见的数据结构,它由节点组成,每个节点最多有两个子节点(左子节点和右子节点),并且它们按一定的规则排序。在二叉树中,每个节点都包含一个值和指向其两个子节点的指针。

实现流程:

  1. 定义节点结构体

在Golang中,我们可以使用结构体来定义二叉树节点。节点包含值和指向左子节点和右子节点的指针:

Copy codetype Node struct {
    Value int
    Left  *Node
    Right *Node
}
  1. 插入节点

有了节点结构体,我们就可以开始构建二叉树。在二叉树中,每个节点的值不重复。在插入新节点时,请始终遵循与二叉查找树有关的规则:对于每个节点,左子树中的所有节点都必须小于它,右子树中的所有节点都必须大于它。

Copy codefunc (n *Node) Insert(value int) *Node {
    if n == nil {
        return &Node{Value: value}
    }

    if value < n.Value {
        n.Left = n.Left.Insert(value)
    } else {
        n.Right = n.Right.Insert(value)
    }

    return n
}
  1. 遍历二叉树

我们可以实现几种不同的遍历方法,例如先序遍历,中序遍历和后序遍历。

  • 先序遍历:按照“根-左-右”的顺序遍历二叉树。
  • 中序遍历:按照“左-根-右”的顺序遍历二叉树。
  • 后序遍历:按照“左-右-根”的顺序遍历二叉树。

下面是一个中序遍历实现的例子:

Copy codefunc (n *Node) TraverseInOrder(f func(int)) {
    if n == nil {
        return
    }
    n.Left.TraverseInOrder(f)
    f(n.Value)
    n.Right.TraverseInOrder(f)
}
  1. 查找节点

在二叉树中查找节点的过程与插入节点类似。我们从根节点开始并根据当前节点与目标节点的值比较,在左侧或右侧子树中移动。

Copy codefunc (n *Node) Contains(value int) bool {
    if n == nil {
        return false
    }
    if n.Value == value {
        return true
    } else if value < n.Value {
        return n.Left.Contains(value)
    } else {
        return n.Right.Contains(value)
    }
}

这是二叉树的基本实现。这里提到的实现只是其中的一个简单版本,还有其他许多基于二叉树的数据结构和算法。

标签: golang, 二叉树

非特殊说明,本博所有文章均为博主原创。

评论啦~