go语言判断一棵树是否是二叉搜索树

本文探讨了如何使用Go语言判断一棵树是否为二叉搜索树。二叉搜索树的特性是左子树节点值小于根节点,右子树节点值大于根节点。通过中序遍历收集所有节点值并检查是否为递增数组来验证其性质。文中还给出了错误示例及代码实现。

点击个人博客,查看更多文章https://elonjelinek.github.io

二叉搜索树主要用来实现搜索操作,二叉搜索树在最坏情况下平均搜索和插入的时间复杂度为O(log n)。

在二叉搜索树中,所有左子树的节点的元素小于根节点数据,所有右子树的节点的元素大于根节点数据,并且树中的每个节点都满足该性质。

  1. 左子树所有节点的值均小于它的根节点的值;
  2. 右子树所有节点的值均大于它的根节点的值;
  3. 任意节点的左右子树也分别为二叉搜索树。

二叉树的声明与一般树的声明没有区别,唯一的区别在于数据而不是结构,声明如下

type Tree struct {
    Value int
    Left  *Tree
    Right *Tree
}

判断一棵树是否为二叉搜索树的思路为:将所有节点的值用中序遍历追加到一个数组中,然后判断这个数组是否是递增数组,如果是递增数组,那么这棵树为二叉搜索树,否则不是二叉搜索树,具体实现如下:

声明一个全局数组

var arr []int

用中序遍历把所有节点的值追加到数组中

func inOrder(Tree *Tree) []int {
    if Tree != nil {
        inOrder(Tree.Left)
        arr = append(arr, Tree.Value)
        inOrder(Tree.Right)
    }
    return arr
}

判断是否为递增数组

func isBinaryTree(tree *Tree) bool {

    arr := inOrder(tree)

    for i := 0; i < len(arr)-1; i++ {
        if arr[i] <= arr[i+1] {
            continue
        } else {
            return 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值