LeetCode 109. Convert Sorted List to Binary Search Tree

Solution1:我的答案
偷鸡摸狗的做法

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
/*** Definition for a binary tree node.* 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;vector<int> num;ListNode* cur = head;while (cur) {num.push_back(cur->val);cur = cur->next;}return sortedArrayToBST(num, 0 , num.size() - 1);}TreeNode *sortedArrayToBST(vector<int> &num, int left, int right) {if (left > right) return NULL;int mid = (left + right) / 2;TreeNode *cur = new TreeNode(num[mid]);cur->left = sortedArrayToBST(num, left, mid - 1);cur->right = sortedArrayToBST(num, mid + 1, right);return cur;}
};

Solution2:
正儿八经的做法
【重点】:学习快慢指针找链表中点的代码写法
参考网址:http://www.cnblogs.com/grandyang/p/4295618.html
链表的查找中间点可以通过快慢指针来操作,可参见之前的两篇博客Reorder List 链表重排序和Linked List Cycle II 单链表中的环之二有关快慢指针的应用。找到中点后,要以中点的值建立一个数的根节点,然后需要把原链表断开,分为前后两个链表,都不能包含原中节点,然后再分别对这两个链表递归调用原函数,分别连上左右子节点即可。代码如下:

class Solution {
public:TreeNode *sortedListToBST(ListNode *head) {if (!head) return NULL;if (!head->next) return new TreeNode(head->val);ListNode *slow = head;ListNode *fast = head;ListNode *last = slow;while (fast->next && fast->next->next) {last = slow;//last是slow的前一个结点,也是隶属于左子树链表的最后一个结点slow = slow->next;fast = fast->next->next;}fast = slow->next;//把fast设置为隶属于右子树链表的起点last->next = NULL;TreeNode *cur = new TreeNode(slow->val);if (head != slow) cur->left = sortedListToBST(head);cur->right = sortedListToBST(fast);return cur;}
};

【链表递归构造二叉树】LeetCode 109. Convert Sorted List to Binary Search Tree相关推荐

  1. LeetCode: 109. Convert Sorted List to Binary Search Tree

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

  2. LeetCode 109. 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 108. Convert Sorted Array to Binary Search Tree

    LeetCode 108. Convert Sorted Array to Binary Search Tree Solution1:我的答案 构造二叉树利用递归 /*** Definition fo ...

  4. 【leetcode】109. Convert Sorted List to Binary Search Tree

    题目如下: Given a singly linked list where elements are sorted in ascending order, convert it to a heigh ...

  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 OJ - Convert Sorted List to Binary Search Tree

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

  7. 109. Convert Sorted List to Binary Search Tree

    题目 原始地址:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/#/description /*** D ...

  8. LeetCode: 108. 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 108. Convert Sorted Array to Binary Search Tree

    题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...

最新文章

  1. 英语计算机工程师求职信,电脑工程师的英文求职信样文
  2. Windows10 JDK9安装及配置环境变量与Eclipse安装
  3. HBase -ROOT-和.META.表结构
  4. redis bind多个ip_Spring Boot 中 Redis 的使用
  5. C语言的一些有趣的冷知识
  6. java 数组排序论文_Java 7是否对方法Arrays.Sort使用Tim Sort?
  7. C#实验报告 类与对象的访问性:银行账户存取款、新建账户、查询余额
  8. 多线程 调用多线程的方法 Runtime与ProcessBuilder
  9. Android “再按一次退出“
  10. 架构组件:基于Shard-Jdbc分库分表,数据库扩容方案
  11. CVPR 2019 爆款论文作者现场解读:视觉语言导航、运动视频深度预测、6D姿态估计...
  12. 面试官最常问的问题总结(一)
  13. css3中transition和display的坑
  14. 2020-06-05 原始套接字/AF_PACKET链路层访问
  15. 阿里云centos7上yum安装并连接mysql
  16. 视频文件压缩成什么格式最小?
  17. 拆弹实验-phase_3
  18. vue双花括号的使用
  19. Python数据结构速成
  20. 使用微信web开发者工具调试接口数据【开发记录】

热门文章

  1. np.random.choice的用法
  2. 数据结构上机实践第五周项目3 - 括号的匹配
  3. Latex文本文档的排版
  4. 云免流控服务器响应失败,云免流服务器是否违法
  5. 键盘可以实现向计算机输入数据判断,计算机应用基础—学习指南.docx
  6. 请使用webdav_介绍下phpdav的使用功能价值
  7. 自学Java要不要背熟语法_JAVASE经典面试问题(必须熟背),你Get到了吗?
  8. linux配置路径,Linux下配置搜索路径
  9. mysql update 几万 非常慢_Mysql优化专题
  10. jooq生成records_Java 14 Records类