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

这题和sort list等题都比较相似,需要先用快慢指针的方法找到链表的中点,然后用recursive的方式构建左子树和右子树(用到的思想是Divide&Conquer),然后再构建好这个节点。

编程时一点要注意:

(1)dummy节点的使用可以帮助找到中点的prev节点

但是dummy节点只有当用时再构造,建议不要提前建好当参数传进来,会非常不清晰。用完后最后记得delete,否则会memory leak. 也不能delete得过早,因为prev可能等于dummy.

(2)边界情况

当middle节点为head时,应注意,左子树为NULL,不要递归build。

Code:

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode *sortedListToBST(ListNode *head) {
if(!head) return NULL;
TreeNode* treeHead = buildTree(head);
return treeHead;
} TreeNode* buildTree(ListNode *head)
{
if(!head) return NULL;
if(!head->next) return new TreeNode(head->val); ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* prev = dummy, *slow = dummy->next, *fast = dummy->next->next;
while(fast && fast->next)
{
slow = slow->next;
prev = prev->next;
fast = fast->next->next;
} TreeNode* cur = new TreeNode(slow->val); TreeNode* left, *right; // second error, cannot initialize left in the if-else
right = buildTree(slow->next);
if(prev != dummy) // first error
{
prev->next = NULL;
left = buildTree(head);
}
else left = NULL; cur->left = left;
cur->right = right; delete dummy; // first error, can not delete dummy too early if prev equals dummy return cur;
}
};

  

5 Convert Sorted List to Binary Search Tree_Leetcode的更多相关文章

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

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

  2. [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 ...

  3. [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. 这道 ...

  4. 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 ...

  5. [Leetcode][JAVA] Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree

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

  6. 【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 ...

  7. 【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 ...

  8. 【LeetCode OJ】Convert Sorted Array to Binary Search Tree

    Problem Link: http://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ Same idea ...

  9. 34. Convert Sorted List to Binary Search Tree && Convert Sorted Array to Binary Search Tree

    Convert Sorted List to Binary Search Tree OJ: https://oj.leetcode.com/problems/convert-sorted-list-t ...

随机推荐

  1. 12月4日PHPCMS模板

    cms的样式有很多种,我们学习的是phpcms,这些cms都是大同小异,学会了一种就可以使用其它的cms. PHPCMS是一款网站管理软件.该软件采用模块化开发,支持多种分类方式,使用它可方便实现个性 ...

  2. javascript中this

    js函数中的this指向问题:(this对象是在运行时基于函数的执行环境绑定的) 与普通变量获取不同,内部函数在搜索this和arguments这两个变量时,只搜索到其活动对象为止,所以this无法像 ...

  3. CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14

    准备篇: CentOS 7.0系统安装配置图解教程 http://www.osyunwei.com/archives/7829.html 一.配置防火墙,开启80端口.3306端口 CentOS 7. ...

  4. linux常见命令总结

    日志文件说明 /var/log/message 系统启动后的信息和错误日志,是Red Hat最常用的日志之一 /var/log/secure 与系统安全相关的日志信息 /var/log/maillog ...

  5. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  6. jquery select操作大全

    添加option $("#ID option").each(function(){ if($(this).val() == 111){ $(this).remove(); } }) ...

  7. 第一届山东省ACM——Balloons(java)

    Description Both Saya and Kudo like balloons. One day, they heard that in the central park, there wi ...

  8. html 杂记

    <link rel="******"  href=“****.css” type=“text/css”  media=“screen” />css样式外部链接 加个斜杠 ...

  9. 在利用xampp开发时候为apache设置多个项目目录

    在做毕业设计的时候由于想将工作目录与毕业设计的目录分离,所以有此需求: 下面两种方法是google出来的,分别通过配置多ip和多端口实现,不是能否用单ip发布多个项目,如有方法请留言,学习一下 1.配 ...

  10. http://www.microsoft.com/en-pk/download/details.aspx?id=40762

    http://www.microsoft.com/en-pk/download/details.aspx?id=40762