原题地址:

https://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/

题目内容:

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

方法:

单纯。如何安排插入顺序,使得一棵二叉排序树接近平衡?

你从中间开始插嘛。这样左子树和右子树之差或者为0,或者为1。

所以,这个问题的本质是找链表的中间节点。

找到中间节点后,递归产生左子树和右子树,在找左边子链表的中间节点和右边子链表的中间节点即可。

当然啦,最后返回中间节点。

全部代码:

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; next = null; }
* }
*/
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode sortedListToBST(ListNode head) {
int len = countLen(head);
if (len == 0)
return null;
return constructTree(head,len); // len is the number of nodes in list.
} private TreeNode constructTree(ListNode head,int len)
{
if (head == null || len <= 0)
return null;
int mid = len / 2 + 1;
TreeNode tmp = new TreeNode(head.val);
tmp.left = null;
tmp.right = null;
if (mid == 0)
return tmp;
ListNode tar = findMidNode(head,mid);
tmp.val = tar.val;
tmp.left = constructTree(head,mid - 1);
tmp.right = constructTree(tar.next,len - mid);
return tmp;
} private ListNode findMidNode(ListNode head,int mid)
{
int count = 1;
while (mid != count++)
head = head.next;
return head;
} private int countLen(ListNode head)
{
int len = 0;
while (head != null)
{
len ++;
head = head.next;
}
return len;
}
}

【原创】leetCodeOj ---Convert Sorted List to Binary Search Tree 解题报告的更多相关文章

  1. 【LeetCode】109. Convert Sorted List to Binary Search Tree 解题报告(Python)

    [LeetCode]109. Convert Sorted List to Binary Search Tree 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id ...

  2. LeetCode: Convert Sorted List to Binary Search Tree 解题报告

    Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...

  3. LeetCode: Convert Sorted Array to Binary Search Tree 解题报告

    Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...

  4. 【LeetCode】108. Convert Sorted Array to Binary Search Tree 解题报告 (Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 题目地址:ht ...

  5. leetcode -day19 Convert Sorted List to Binary Search Tree

    1.  Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted ...

  6. Leetcode: Convert sorted list to binary search tree (No. 109)

    Sept. 22, 2015 学一道算法题, 经常回顾一下. 第二次重温, 决定增加一些图片, 帮助自己记忆. 在网上找他人的资料, 不如自己动手. 把从底向上树的算法搞通俗一些. 先做一个例子: 9 ...

  7. [LeetCode] Convert Sorted List to Binary Search Tree 将有序链表转为二叉搜索树

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

  8. [LeetCode] Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 这道 ...

  9. leetcode -- Convert Sorted List to Binary Search Tree

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

随机推荐

  1. SilkTest高级进阶系列7-用PostMessage模拟鼠标

    SilkTest可以通过调用Windows API来向控件发送消息,从而进行特定的操作.下面这段code使用PostMessage来向计算器上的清除键发送WM_LBUTTONDOWN和WM_LBUTT ...

  2. phpStorm打开提示 failed to create JVM 的解决的方法

    phpStorm 软件打开执行提示 failed to create JVM的解决的方法. 改动文件 D:\Program Files (x86)\JetBrains\PhpStorm 7.1.3\b ...

  3. SQL SERVER CHARINDEX函数

    CHARINDEX函数经常常使用来在一段字符中搜索字符或者字符串.假设被搜索的字符中包括有要搜索的字符,那么这个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的開始位数.即CHARIN ...

  4. Mod in math

    An Introduction to Modular Math When we divide two integers we will have an equation that looks like ...

  5. stm32f103 TIM1初始化--定时器应用

    //TIM1 分频 #define TIM1_DIV1 (1-1) #define TIM1_DIV2 (2-1) #define TIM1_DIV4 (4-1) #define TIM1_DIV8 ...

  6. 基于S5pv210流媒体server的实现之网络摄像头(by liukun321 咕唧咕唧)

    这里仅介绍流媒体server端的实现思路.及编码注意问题,不会贴代码的详细实现. 直接入正题先介绍一下系统硬件框架: server端连接PC机用VLC播放例如以下图: server端应用程序能够分为图 ...

  7. 从零开始学C++之动态创建对象

    回顾前面的文章,实现了一个简单工厂模式来创建不同类对象,但由于c++没有类似new "Circle"之类的语法,导致CreateShape 函 数中需要不断地ifelse地去判断, ...

  8. ASA failover应用

    failover的条件: 1.硬件型号必须相同 2.系统版本必须一致 3.模式必须一致 4.相同的许可和许可的数量 步骤: step 1:配置failover interface,确保状态 up LZ ...

  9. Map实现之HashMap(结构及原理)(转)

    java.util包中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map.List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构 ...

  10. hdu4578(线段树)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 题意:n个数,初始值为0,4种操作: 1.将某个区间所有值加上另一个值: 2.将区间所有值都乘上 ...