[leetcode] Convert Sorted List to Binary Search Tree
2015-07-17 16:32
423 查看
#include<iostream> #include<vector> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int val):val(val),left(NULL),right(NULL){}; }; struct ListNode { int val; ListNode* next; ListNode(int val):val(val),next(NULL){}; }; class Solution { public: TreeNode* sortedListToBST (ListNode* head) { return sortedListToBST (head, listLength (head)); } TreeNode* sortedListToBST (ListNode* head, int len) { if (len == 0) return NULL; TreeNode* root = new TreeNode (nth_node (head, len / 2 +1)->val); root->left = sortedListToBST (head, len / 2); root->right = sortedListToBST (nth_node (head, len / 2 + 2),len-len / 2-1); return root; } int listLength (ListNode* node) { int n = 0; while(node) { ++n; node = node->next; } return n; } ListNode* nth_node (ListNode* node, int n) { while (--n) node = node->next; return node; } void display(TreeNode* root) { if(!root) return; display(root->left); cout<<root->val<<' '; display(root->right); } }; class Solution2 { public: TreeNode *sortedListToBST(ListNode *head) { int len = 0; ListNode *p = head; while (p) { len++; p = p->next; } return sortedListToBST(head, 0, len - 1); } void display(TreeNode* root) { if(!root) return; display(root->left); cout<<root->val<<' '; display(root->right); } private: TreeNode* sortedListToBST(ListNode*& list, int start, int end) { if (start > end) return NULL; int mid = start + (end - start) / 2; TreeNode *leftChild = sortedListToBST(list, start, mid - 1); if(leftChild) cout<<"left "<<leftChild->val<<' '; else cout<<"left no"<<' '; TreeNode *parent = new TreeNode(list->val); parent->left = leftChild; list = list->next; parent->right = sortedListToBST(list, mid + 1, end); return parent; } }; void main() { Solution2 solution; ListNode* node=new ListNode(1); ListNode* root=node; for(int i=2;i<8;i++) { ListNode* cur=new ListNode(i); node->next=cur; node=node->next; } node->next=NULL; TreeNode* head; head=solution.sortedListToBST(root); solution.display(head); }
相关文章推荐
- JsonObject 处理日期
- 7_17
- struct 结构名
- Swift学习笔记系列——(9)属性
- zoj 1905 Power String(后缀数组)
- leetCode 66.Plus One (+1问题) 解题思路和方法
- 守护进程
- The Unsolvable Problem
- 序列化魔术函数__sleep()和反序列化魔术函数__wakeup()
- javascript学习笔记之DOM与表单
- DFS与BFS 的区别
- opensips添加自定义数据库表(mysql)
- 用sysctl调整linux内核参数
- UiAutomator
- codevs1003
- Linux PS 命令详解
- GMM-HMM学习笔记
- 【Android Studio探索之路系列】之四:Android Studio快捷键
- iOS事件拦截及应用
- 开博啦