博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
109. Convert Sorted List to Binary Search Tree
阅读量:2351 次
发布时间:2019-05-10

本文共 2469 字,大约阅读时间需要 8 分钟。

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

我的想法

二分,根结点是每段的中点。但是因为给的是一个linkedlist,不好分段访问,每次都得从头遍历。但是直接用for循环把linkedlist换成array感觉又失去了这道题的意义。

class Solution {
public TreeNode sortedListToBST(ListNode head) {
if(head == null) {
return null; } ListNode cur = head; int end = 0; while(cur != null) {
end++; cur = cur.next; } int mid = end / 2; ListNode node = getNode(mid, head); TreeNode root = new TreeNode(node.val); helper(0, mid, head, root); helper(mid + 1, end, head, root); return root; } private void helper(int start, int end, ListNode head, TreeNode root) {
if(end - start <= 0) {
return; } int mid = start + (end - start) / 2; ListNode node = getNode(mid, head); TreeNode newRoot = new TreeNode(node.val); if(node.val > root.val) {
root.right = newRoot; } else {
root.left = newRoot; } helper(start, mid, head, newRoot); helper(mid + 1, end, head, newRoot); } private ListNode getNode(int index, ListNode head) {
ListNode res = head; while(index > 0) {
res = res.next; index--; } return res; }}

解答

jiuzhang solution:

用中序遍历来构造BST,只需要按顺序读linkedlist,因此定义一个全局变量以记录当前访问到的linkedlist结点

public class Solution {
private ListNode current; private int getListLength(ListNode head) {
int size = 0; while (head != null) {
size++; head = head.next; } return size; } public TreeNode sortedListToBST(ListNode head) {
int size; current = head; size = getListLength(head); return sortedListToBSTHelper(size); } public TreeNode sortedListToBSTHelper(int size) {
if (size <= 0) {
return null; } TreeNode left = sortedListToBSTHelper(size / 2); TreeNode root = new TreeNode(current.val); current = current.next; TreeNode right = sortedListToBSTHelper(size - 1 - size / 2); root.left = left; root.right = right; return root; }}

转载地址:http://byqvb.baihongyu.com/

你可能感兴趣的文章
android蓝牙4.0BLE及2.0 2.1 apk 串口助手带16个自定义按键和自定义指令 字符接收 十六进制或字符发送
查看>>
爬虫采集 通用正则表达式
查看>>
织梦学习 变量的运用 添加新变量 删除新变量 添加上传视频mp4
查看>>
CocosCreator+VS2017提示“要求的 VS 版本:[2013, 2015, 2017]”解决办法 无法找到 v140_xp 的生成工具
查看>>
助学贷款系统导入预申请时问题解决办法汇总
查看>>
FTP连接阿里云不能获得列表目录等功能,能连接,21端口也打开了。原因FTP是双向的,阿里云入出方向安全组规则必须添加本地随机端口
查看>>
读书程序标准化建模--高效阅读学习,越学越有劲/趣
查看>>
不翻qiang搞定Android Studio Google库加载不下来的问题 打包生成apk android studio 3.2打灰机程序源码带详细注释
查看>>
仿照利用android系统源码资源文件,修改SeekBar颜色 前景与背景
查看>>
printf及String.format格式化测试
查看>>
android java 经典字符模式通信接收处理,标准modbus通讯协议接收处理提取数据
查看>>
10055自动进刀水钻机android蓝牙2.0SSP项目源码结构使用说明【版本更新、自动连接、控件批量处理、接收解析】
查看>>
Android Studio导入项目时常见问题的解决汇总,Eclipse项目转为Android Studio项目步骤报错万能解决方法汇总
查看>>
Widget.Material.Light.ProgressBar.Horizontal" (10302b8) is not a Drawable (color or path)错误解决
查看>>
解决java中文乱码,编码识别测试,汇总
查看>>
android定时,延时,倒计时源码
查看>>
Eclipse导入项目时常见问题解决汇总, Android Studio转为Eclipse项目问题汇总
查看>>
com.android.dex.DexIndexOverflowException
查看>>
AndroidStudio一个工程内查看多个项目的实现
查看>>
Gradle Build速度加快终极方法
查看>>