[Leetcode]Convert Sorted List to Binary Search Tree
2015-10-12 22:03
351 查看
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
/** * 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: /*alorithm: divide and conquere two pointer 1->2->3->4->5 //f:3,s = 5 1->2->3->4 //f:3 , s = 4 */ TreeNode* sortedListToBST(ListNode* head) { ListNode* first = head,*second = head; ListNode* ftail = NULL; while(second&&second->next){ second = second->next; if(second->next)second = second->next; ftail = first; first = first->next; } TreeNode* root = NULL; if(first){ root = new TreeNode(first->val); if(ftail)ftail->next = NULL; root->left = ftail == NULL?NULL:sortedListToBST(head); root->right = sortedListToBST(first->next); } return root; } };
class Solution { public: int getCount(ListNode* head){ int count = 0; while(head){ count++; head = head->next; } return count; } //[start,end) TreeNode* sortedListToBSTSub(ListNode* &head,int start,int end){ if(start >= end)return NULL; int m = start + (end-start)/2; TreeNode* l,*r,*root; l = sortedListToBSTSub(head,start,m); root = new TreeNode(head->val); head = head->next; r = sortedListToBSTSub(head,m+1,end); root->left = l; root->right = r; return root; } TreeNode* sortedListToBST(ListNode* head) { int n = getCount(head); return sortedListToBSTSub(head,0,n); } };
相关文章推荐
- SQLSTATE[HY000] [2002] No such file or directory php连接mysql失败
- BitmapFactory.decodeStream方法返回null的错误分析
- ZOJ.2679 Old Bill【水】 2015/10/12
- 游戏系统开发笔记(二)——开发流程和项目管理
- MQX 之串口使用
- HTML简要内容
- UINavigationBar导航栏相关设置
- 游戏系统开发笔记(一)——立项、分工和制作基础
- js验证真实姓名与身份证号,手机号
- Java考题
- [利用好互联网]两招教你随时关注别人博客是否有更新
- 数据结构(九)满二叉树深度计算
- ios学习之自定义窗口的激活
- Scala学习笔记16【Scala闭包代码实例】
- [Django模板系统]大致了解Django的模板系统
- Linux 下安装Samba 文件共享服务器
- Xcode和github入门详细教程
- leetcode之Implement Queue using Stacks
- 【C语言】求最大最小值
- 自定义Hive Sql Job分析工具