当前位置: 首页 > news >正文

卓拙科技做网站吗教程seo推广排名网站

卓拙科技做网站吗,教程seo推广排名网站,武汉网站建设 网站制作,广西网站建设-好发信息网将有序数组转换为二叉搜索树 https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/ 描述 给你一个整数数组 nums ,其中元素已经按 升序 排列请你将其转换为一棵 平衡 二叉搜索树 示例 1 输入:nums [-10,-3,0,5,9…

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

  • https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/

描述

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

示例 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,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

提示

  • 1 <= nums.length <= 1 0 4 10^4 104
  • - 1 0 4 10^4 104 <= nums[i] <= 1 0 4 10^4 104
  • nums 按 严格递增 顺序排列

Typescript 版算法实现


1 ) 方案1: 中序遍历,总是选择中间位置左边的数字作为根节点

/*** Definition for a binary tree node.* class TreeNode {*     val: number*     left: TreeNode | null*     right: TreeNode | null*     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {*         this.val = (val===undefined ? 0 : val)*         this.left = (left===undefined ? null : left)*         this.right = (right===undefined ? null : right)*     }* }*/function sortedArrayToBST(nums: number[]): TreeNode | null {return helper(nums, 0, nums.length - 1);
}function helper(nums: number[], left: number, right: number): TreeNode | null {if (left > right) return null;// Preventing overflow for large arrays by using the following formulalet mid = left + Math.floor((right - left) / 2);let root = new TreeNode(nums[mid]);root.left = helper(nums, left, mid - 1);root.right = helper(nums, mid + 1, right);return root;
}

2 ) 方案2: 中序遍历,总是选择中间位置右边的数字作为根节点

/*** Definition for a binary tree node.* class TreeNode {*     val: number*     left: TreeNode | null*     right: TreeNode | null*     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {*         this.val = (val===undefined ? 0 : val)*         this.left = (left===undefined ? null : left)*         this.right = (right===undefined ? null : right)*     }* }*/function sortedArrayToBST(nums: number[]): TreeNode | null {return helper(nums, 0, nums.length - 1);
}function helper(nums: number[], left: number, right: number): TreeNode | null {if (left > right) return null;// 总是选择中间位置右边的数字作为根节点let mid = Math.floor((left + right + 1) / 2); // 加1保证了当长度为偶数时取右中位数let root = new TreeNode(nums[mid]);root.left = helper(nums, left, mid - 1);root.right = helper(nums, mid + 1, right);return root;
}

3 ) 方案3: 中序遍历,选择任意一个中间位置数字作为根节点

/*** Definition for a binary tree node.* class TreeNode {*     val: number*     left: TreeNode | null*     right: TreeNode | null*     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {*         this.val = (val===undefined ? 0 : val)*         this.left = (left===undefined ? null : left)*         this.right = (right===undefined ? null : right)*     }* }*/function sortedArrayToBST(nums: number[]): TreeNode | null {return helper(0, nums.length - 1);function helper(left: number, right: number): TreeNode | null {if (left > right) return null;// 选择任意一个中间位置数字作为根节点let mid: number;if ((right - left) % 2 === 0) {// 如果左右边界之间是奇数个元素,只有一个中间值mid = Math.floor((left + right) / 2);} else {// 如果左右边界之间是偶数个元素,随机选择一个中间值mid = left + Math.floor((right - left + Math.random()) / 2);}const root = new TreeNode(nums[mid]);root.left = helper(left, mid - 1);root.right = helper(mid + 1, right);return root;}
}

4 ) 方案4: 简单版本

/*** Definition for a binary tree node.* class TreeNode {*     val: number*     left: TreeNode | null*     right: TreeNode | null*     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {*         this.val = (val===undefined ? 0 : val)*         this.left = (left===undefined ? null : left)*         this.right = (right===undefined ? null : right)*     }* }*/function sortedArrayToBST(nums: number[]): TreeNode | null {if(!nums.length) return null// 二叉搜索树的中序遍历,就是升序列表// 数组中间的位置,可以作为树的根节点const mid = Math.floor(nums.length / 2)const root = new TreeNode(nums[mid])root.left = sortedArrayToBST(nums.slice(0,mid))root.right = sortedArrayToBST(nums.slice(mid+1))return root
}
http://www.hkea.cn/news/99/

相关文章:

  • 山东法院网站哪个公司做的如何推广普通话
  • 怎么接网站来做品牌推广专员
  • 给老外做兼职的网站陕西seo顾问服务
  • b2c电子商城网站建设有什么推广软件
  • 个人备案做企业网站网站一级域名和二级域名区别
  • 好多公司为啥只做网站 不考虑推广seo怎么优化方案
  • 大型做网站的公司有哪些网站快速排名优化哪家好
  • 网站建设中首页模板下载爱站网备案查询
  • 企业营销网站建设费用预算搜索引擎优化的步骤
  • 网站开发毕业论文结论学网络营销去哪个学校
  • 软件开发经费预算成都专业的整站优化
  • 京东做代码的网站吗德阳seo优化
  • 网站开发培训 价格百度指数怎么看地域数据
  • 同企网站建设做网站9个成功的市场营销案例
  • 哪个网站做售楼推广好广州网站推广排名
  • 深圳外贸商城网站建设邯郸网站建设优化
  • 常德行业网站南宁百度seo软件
  • 去除tag wordpress武汉做seo公司
  • 家居网站应该怎么做怎么给公司做网站
  • 慈善总会网站建设方案网络营销的基本方法有哪些
  • 环保产品企业网站建设西安核心关键词排名
  • 深圳南山网站开发电商代运营公司排名
  • wap手机网站百度新闻官网
  • 做企业平台网站成本发稿吧
  • 中国林业网站群建设工程全渠道营销
  • 哈尔滨做平台网站平台公司吗b2b平台网站
  • 笔记本做系统哪个网站好seo优化实训总结
  • swoole怎么做直播网站文军seo
  • 圣诞网站怎么做搜索词热度查询
  • 北京建设网站哪家好方象科技的企业愿景