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

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。

高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

题目示例

示例 1:


输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

示例 2:
输入:nums = [1,3]
输出:[3,1]
解释:[1,3] 和 [3,1] 都是高度平衡二叉搜索树。

解题思路

选择中间位置左边的数字作为根节点,则根节点的下标为

mid := (start + end) / 2

此处的除法为整数除法。

  • 临界条件是start>end,则中止
  • 左边节点,递归start,mid-1
  • 右边节点,递归mid+1,end

第一种实现-Golang


type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode
}func TestSortedArrayToBST(t *testing.T){var nums = []int{1,2,3,4,5,6,7,8,9}root:=arrToTreeToBsf(nums,0,len(nums)-1)printfZtree(root)
}func arrToTreeToBsf(nums []int,start,end int) *TreeNode{if start>end{return nil}//取中间位置,用作根节点mid := (start + end) / 2root := &TreeNode{Val: nums[mid]}//左边节点、是从0开始到中间节点root.Left=arrToTreeToBsf(nums,start,mid-1)//右边节点、是从中间节点+1开始到末尾root.Right=arrToTreeToBsf(nums,mid+1,end)return root
}//中序遍历,左根右
func printfZtree( tr *TreeNode)  {if tr==nil{return}printfZtree(tr.Left)fmt.Printf("%v ->",tr.Val)printfZtree(tr.Right)
}

第二种实现-Java

import java.util.Stack;/*** Definition for a binary tree node.**/
public class SortedArrayToBST {public static void main(String[] args) {int[] a={1,2,3,4,5,6,7,8,9};TreeNode treeNode = sortedArrayToBST(a);System.out.println(" " );printfZtree(treeNode);}//中序遍历,左根右public  static  void printfZtree(TreeNode node){if(node==null){return;}printfZtree(node.left);System.out.print(node.val + "->");printfZtree(node.right);}public static TreeNode sortedArrayToBST(int[] nums) {return sortedArrayToBST(nums, 0, nums.length-1);}private static TreeNode sortedArrayToBST(int[] nums, int start, int end) {if(start > end)return null;//取中间位置,用作根节点int mid = (start + end) / 2;TreeNode root = new TreeNode(nums[mid]);//左边节点、是从0开始到中间节点-1root.left = sortedArrayToBST(nums, start, mid-1);//右边节点、是从中间节点+1开始到末尾root.right = sortedArrayToBST(nums, mid + 1, end);return root;}public static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }}}

结果验证

Java结果验证:

Golang结果验证:

​​​​​​​

Golang Java 实现 【将有序数组装换为二叉搜索树】相关推荐

  1. java 二叉查找树_如何在Java中实现二叉搜索树( binary search tree)?

    二叉搜索树或BST是一种流行的数据结构,用于保持元素的顺序.二叉搜索树是二叉树,其中左子节点的值小于或等于父节点,右子节点的值大于或等于父节点.由于它是二叉树,它只能有0,1或2个子节点.二叉搜索树之 ...

  2. 二叉树:二叉搜索树实现 逆序数问题

    关于逆序数的问题描述如下: 已知数组nums,求新数组count,count[i]代表了在nums[i]右侧且比 nums[i]小的元素个数. 例如: nums = [5, 2, 6, 1], cou ...

  3. 《LeetCode力扣练习》第96题 不同的二叉搜索树 Java

    <LeetCode力扣练习>第96题 不同的二叉搜索树 Java 一.资源 题目: 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回 ...

  4. 不同的二叉搜索树-战胜100%的Java用户

    不同的二叉搜索树 执行耗时:0 ms,击败了100.00% 的Java用户 内存消耗:36.3 MB,击败了66.22% 的Java用户 如下图,在二叉搜索树中,数值最大的节点N一定是在树的最右端,其 ...

  5. 【Java】 剑指offer(36) 二叉搜索树与双向链表

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不 ...

  6. 剑指offer(Java实现) 二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 先找到右子树的开始位置,然后分别进行左右 ...

  7. bst java_BST(二叉搜索树) Java 实现解析

    1.二叉搜索树的定义:一颗树的所有左子树都比根小,所有右子树都比根大,成为二叉搜索树. 2.该BST树实现了9个重要方法,分别是关键字查找,插入,删除,删除节点后续节点查找,前序遍历,中序遍历,后序遍 ...

  8. 数据结构 - 从二叉搜索树说到AVL树(一)之二叉搜索树的操作与详解(Java)

    二叉搜索树(Binary Search Tree),简称BST,顾名思义,一颗可以用于搜索的二叉树.BST在数据结构中占有很重要的地位,一些高级树结构都是其的变种,例如AVL树.红黑树等,因此理解BS ...

  9. leetcode 530. 二叉搜索树的最小绝对差(Java版)

    题目 https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 题解 中序遍历法. 本题要求二叉搜索树任意两节点差的绝对 ...

最新文章

  1. Spring MVC常用注解--“姐妹花”@RequestBody和@ResponseBody
  2. 算法笔记-经典链表操作案例
  3. iPhone12 safeArea顶部区域尺寸变化
  4. 详解Android Handler的使用
  5. 普211标准三维EE零基础转CS申
  6. I春秋——web Write up(一)
  7. Android之判断是否有网封装类
  8. VMware vCloud® Suite 5.5功能介绍
  9. python列表操作符_python——列表操作符
  10. 宝藏世界显示连接不到服务器,宝藏世界新手常见问题解答 新手攻略
  11. 简单的dp(dp专题)
  12. 大数据开发笔记(八):Spark综合笔记总结
  13. 事务失败返回_分布式事务有这一篇就够了!
  14. 用C#代码实现求两条线段的交点并判断各种情况
  15. 高等数学第七版总结(同济大学版)
  16. 宝马冷却系统及电动冷却液泵部件(电子水泵)功能特性及标准
  17. android 手机自动登录,Android:程序跳过登录界面直接进入主界面(自动登录)
  18. Cisco ISO 计划命令 kron实现配置定时自动备份
  19. ccProxy软件实现网络共享
  20. 织梦标签调用:根据特定需求调用文章的标签代码

热门文章

  1. 无心剑古体诗《永恒之美》
  2. Python学习笔记:模块与包
  3. Spring Boot 案例:连接后台数据库实现用户登录
  4. 大数据学习笔记40:Hive - 内置函数(3)
  5. 《天天数学》连载10:一月十日
  6. 编写函数实现列表平面化
  7. mysql 空字符串_NULL与MySQL空字符串的区别
  8. 2017.10.6 单词 思考记录
  9. 2017.8.24 快速傅里叶 思考记录
  10. 【英语学习】【WOTD】resuscitate 释义/词源/示例