108.将有序数组转换为二叉搜索树

文章目录前言一、题目:将有序数组转换为二叉搜索树二、解题代码总结前言二叉搜索树一定程度上可以提高搜索效率。高度平衡二叉树:指左右子树的高度相差不超过 1 的树为平衡二叉树。举个例子先假设一个单链表,如果要找6数字,是不是要一个一个遍历,最后遍历6次,才找到6,但是这样效率比较低。但如果是树结构,查找6数字的话,只需要遍历3次就可以找到,时间上快了一倍。刚刚大概讲了一下什么是二叉树,想要深入了解的话可以看一下这篇文章。二叉树链接一、题目:将有序数组转换为二叉搜索树学习过树结构的
摘要由CSDN通过智能技术生成

前言

二叉搜索树一定程度上可以提高搜索效率。高度平衡二叉树:指左右子树的高度相差不超过 1 的树为平衡二叉树。

  • 举个例子

先假设一个单链表,如果要找6数字,是不是要一个一个遍历,最后遍历6次,才找到6,但是这样效率比较低。

在这里插入图片描述

  • 但如果是树结构,查找6数字的话,只需要遍历3次就可以找到,时间上快了一倍。

在这里插入图片描述

刚刚大概讲了一下什么是二叉树,想要深入了解的话可以看一下这篇文章。
二叉树链接

一、题目:将有序数组转换为二叉搜索树

在这里插入图片描述
学习过树结构的同学可以了解到,树的中序遍历就是升序执行的,所以这道题其实可以看过是一个逆思维。

这里介绍一下二叉树的一些性质:

  1. 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值
  2. 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值
  3. 任意节点的左、右子树也分别为二叉搜索树

树一共有三种排序:前序中序后序。因为本题涉及的是中序,我们先重点说一下中序排序
中序排序的顺序:左子树----根节点----右子树。基于上面的性质,左子树均小于根节点ÿ

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 Kotlin 实现将有序数组转换为二搜索的代码: ```kotlin class TreeNode(var `val`: Int) { var left: TreeNode? = null var right: TreeNode? = null } fun sortedArrayToBST(nums: IntArray): TreeNode? { return buildBST(nums, 0, nums.size - 1) } fun buildBST(nums: IntArray, left: Int, right: Int): TreeNode? { if (left > right) { return null } val mid = (left + right) / 2 val root = TreeNode(nums[mid]) root.left = buildBST(nums, left, mid - 1) root.right = buildBST(nums, mid + 1, right) return root } ``` 这段代码中,我们首先定义了一个 `TreeNode` 类,用于表示二的节点。然后,我们定义了一个 `sortedArrayToBST` 函数,该函数接受一个有序整数数组 `nums`,并返回一个高度平衡的二搜索。 在 `sortedArrayToBST` 函数中,我们调用了 `buildBST` 函数,该函数用于递归构建二搜索。`buildBST` 函数接受三个参数:有序整数数组 `nums`、左边界 `left` 和右边界 `right`。我们首先判断左边界是否大于右边界,若是,则返回 `null`。否则,我们选取中间位置 `mid`,将 `nums[mid]` 作为当前节点的值,然后递归构建当前节点的左子和右子,并将它们分别赋值给当前节点的 `left` 和 `right` 属性。最后,返回当前节点。 这样,我们就完成了将有序数组转换为二搜索的实现。在上述示例中,我们可以调用 `sortedArrayToBST(intArrayOf(-10, -3, 0, 5, 9))`,得到一个高度平衡的二搜索 `[0, -3, 9, -10, null, 5]`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值