二叉排序树之Golang代码简释

写在前面:本文侧重诠释对算法的思考记录过程,忽略其他诸如代码简洁、字符编码等细节问题。

package main

import "fmt"

type Node struct {
   
	Data  int
	Left  *Node
	Right *Node
}

//二叉排序树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,
//而右子树节点的值都大于这个节点的值。
//构造二叉排序树的目的,并不是为了排序,而是为了提高查找、插入和删除的速度。
//不论是插入、删除、还是查找,二叉排序树的时间复杂度都等于二叉树的高度,
//最好的情况当然是满二叉树或完全二叉树,时间复杂度是 O(logn),性能相当好
//最差的情况是二叉排序树退化为线性表(斜树),此时的时间复杂度是 O(n)
type BinarySortedTree struct {
   
	Tree *Node
}

//插入节点
func (t *BinarySortedTree) Insert(data int) {
   
	//如果是空树,就插入到根节点
	if t.Tree == nil {
   
		t.Tree = &Node{
   Data: data}
		return
	}

	tree := t.Tree
	for tree != nil {
   
		if data < tree.Data {
   
			if tree.Left == nil {
   
				tree.Left = &Node{
   Data: data}
				return
			}
			tree = tree.Left
		} else if data > tree.Data {
   
			if tree.Right == nil {
   
				tree.Right = &Node{
   Data: data}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值