Convert Sorted List to Binary Search Tree
来源:互联网 发布:virtualbox mac怎么用 编辑:程序博客网 时间:2024/04/27 13:36
方案1:找中间结点作为root + recursively 建立左右子树
1)快慢指针法找中间结点mid,作为root,
2) recursive problem: head 到 prev 这一段链表建立左子树, mid->next 到结尾这一段链表建立右子树
复杂度分析:T(n) = 2T(n/2) + n/2 应该是 (n/2) * lgn
TreeNode *sortedListToBST(ListNode *head) { // write your code here if(head==NULL) return NULL; if(head->next==NULL) return new TreeNode(head->val); auto p=head,q=head,preP=head; while(q && q->next) { preP=p; p=p->next; q=q->next->next; } preP->next=NULL; auto root = new TreeNode(p->val); root->left=sortedListToBST(head); root->right=sortedListToBST(p->next); return root; }
方案2:自底向上
定义一个函数 ListNode * sortedListToBST(ListNode *head, int start, int end),含义为:将start和end对应的结点转化成二叉树,同时指针推进到end之后
1)建立左子树,同时链表指针推进过处理过的结点
2)当前结点所为root
3) 建立右子树,同时链表指针推进过处理过的结点
TreeNode *sortedListToBST(ListNode *head) { // write your code here int n = 0; for (auto p = head; p; p = p->next) ++n; return sortedListToBST(head, 0, n - 1); } TreeNode* sortedListToBST(ListNode* &head, int start, int end) { if (start > end) return NULL; int mid = start + (end - start) / 2; auto left = sortedListToBST(head, start, mid - 1); auto root = new TreeNode(head->val); root->left = left; head = head->next; root->right = sortedListToBST(head, mid + 1, end); return root; }
0 0
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- convert sorted list to binary search tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- 浅析WebMail安全
- Leetcode - Longest Palindromic Substring
- Swift语言实战晋级
- Next Permutation
- 高并发网站优化——java缓存框架
- Convert Sorted List to Binary Search Tree
- struts2文件下载
- 内存映射文件夸进程通讯 a和b通讯
- 获取状态栏高度
- 002 java nio 01 - channel and buffer
- iOS 终端SVN命令(常用)
- 详解Android中AsyncTask的使用
- Angular开发者手册重点翻译之指令(一)
- http://mobile.51cto.com/iphone-283494.htm