LeetCode:Convert Sorted Array(List) to Binary Search Tree
来源:互联网 发布:凸轮弹簧机编程 编辑:程序博客网 时间:2024/05/16 10:26
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.
/** * 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* sortedArrayToBST(vector<int>& nums) { int sz=nums.size(); if(nums.empty()) return nullptr; int mid=sz/2; TreeNode *root=new TreeNode(nums[mid]); vector<int> left(nums.begin(),nums.begin()+mid); root->left=sortedArrayToBST(left); vector<int> right(nums.begin()+mid+1,nums.end()); root->right=sortedArrayToBST(right); return root; }/*总结:*1、没有要求用非递归,一般递归解决;*2、要求非递归,先将递归形式写出,然后改。*3、递归有助于理解。*/};
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 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: TreeNode* sortedListToBST(ListNode* head) { vector<int> nums; for(ListNode *p=head;p!=nullptr;p=p->next) { nums.push_back(p->val); } return sortedArrayToBST(nums); }private: TreeNode* sortedArrayToBST(vector<int>& nums) { int sz=nums.size(); if(nums.empty()) return nullptr; int mid=sz/2; TreeNode *root=new TreeNode(nums[mid]); vector<int> left(nums.begin(),nums.begin()+mid); root->left=sortedArrayToBST(left); vector<int> right(nums.begin()+mid+1,nums.end()); root->right=sortedArrayToBST(right); return root; }};
Reference:
https://discuss.leetcode.com/topic/8141/share-my-o-1-space-and-o-n-time-java-code
看了这段代码后,我发现别人写的很巧妙。
下面贴出来写点注释。
private ListNode node;public TreeNode sortedListToBST(ListNode head) { if(head == null){ return null; } int size = 0; ListNode runner = head; node = head;//头节点 //获得长度 while(runner != null){ runner = runner.next; size ++; } return inorderHelper(0, size - 1);}public TreeNode inorderHelper(int start, int end){ if(start > end){ return null; } int mid = start + (end - start) / 2; TreeNode left = inorderHelper(start, mid - 1); TreeNode treenode = new TreeNode(node.val); treenode.left = left; node = node.next; /*以中序遍历的形式,在生成父节点之前已经到达BST最左 *然后一次一次生成父节点,到达最外围时候 *node已经跑到了链表中点 */ TreeNode right = inorderHelper(mid + 1, end); treenode.right = right; return treenode;}
0 0
- LeetCode:Convert Sorted Array(List) to Binary Search Tree
- 【LeetCode】Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree
- [Leetcode]Convert Sorted Array & List to Binary Search Tree
- 【leetcode】Convert Sorted Array/List to Binary Search Tree
- Convert Sorted Array(List) to Binary Search Tree
- LeetCode(108) Convert Sorted Array to Binary Search Tree
- LeetCode(109) Convert Sorted List to Binary Search Tree
- 【LeetCode】convert-sorted-link-to-binary-search-tree & convert-sorted-array-to-binary-search-tree
- Leetcode - Tree - Convert Sorted Array to Binary Search Tree
- *(leetcode) Convert Sorted Array to Binary Search Tree (tree)
- LeetCode[Tree]: Convert Sorted Array to Binary Search Tree
- LeetCode :: Convert Sorted Array (link list) to Binary Search Tree [tree]
- Convert Sorted Array(List) to Binary Search Tree
- Convert Sorted Array/list to Binary Search Tree
- Convert Sorted Array & List to Binary Search Tree
- leetcode 108. Convert Sorted Array to Binary Search Tree Add to List
- LeetCode[Tree]: Convert Sorted List to Binary Search Tree
- [leetcode][list][dfs] Convert Sorted List to Binary Search Tree
- 使用telnet发送邮件
- dsn 查询方式
- 信号量(sem)
- android MediaRecorder录制音视频实现直播的基础
- POJ 2431 Expedition (贪心、优先队列)
- LeetCode:Convert Sorted Array(List) to Binary Search Tree
- Flume简介和配置实战
- httpclient4 取得cookie信息并保存
- 域名解析
- red5整合tomcat下载
- 关于Mysql删除语句delete相关问题
- 创建一个窗口
- spring整合JMS一同步收发消息(基于ActiveMQ的实现)
- 从零开始学_JavaScript_系列(26)——dojo的aspect方法