LeetCode 题解(154): Convert Sorted List to Binary Search Tree
来源:互联网 发布:在哪里买淘宝小号 编辑:程序博客网 时间:2024/05/21 19:39
题目:
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
题解:
递归。
C++版:
class Solution {public: TreeNode* sortedListToBST(ListNode* head) { if(!head) return NULL; int length = 0; ListNode* p = head; while(p) { p = p->next; length++; } return toBST(head, length); } ListNode* findMid(ListNode* head, int pos) { ListNode* p = head; int i = 0; while(i < pos) { p = p->next; i++; } return p; } TreeNode* toBST(ListNode* head, int length) { if(length == 0) { return NULL; } else if(length == 1) { TreeNode* root = new TreeNode(head->val); return root; } else { ListNode* mid = findMid(head, (length - 1) / 2); TreeNode* root = new TreeNode(mid->val); root->left = toBST(head, (length- 1) / 2); root->right = toBST(mid->next, length - (length + 1) / 2); return root; } }};
Java版:
public class Solution { public TreeNode sortedListToBST(ListNode head) { int length = 0; ListNode p = head; while(p != null) { p = p.next; length++; } return toBST(head, length); } public TreeNode toBST(ListNode head, int length) { if(length == 0) { return null; } else if(length == 1) { return new TreeNode(head.val); } else { ListNode mid = findMid(head, length); TreeNode root = new TreeNode(mid.val); root.left = toBST(head, (length - 1) / 2); root.right = toBST(mid.next, length - (length + 1) / 2); return root; } } public ListNode findMid(ListNode head, int length) { ListNode p = head; int i = 0; while(i < (length - 1) / 2) { p = p.next; i++; } return p; }}
Python版:
class Solution: # @param {ListNode} head # @return {TreeNode} def sortedListToBST(self, head): length = 0 p = head while p != None: p = p.next length += 1 return self.toBST(head, length) def toBST(self, head, length): if length == 0: return None elif length == 1: return TreeNode(head.val) else: mid = self.findMid(head, length) root = TreeNode(mid.val) root.left = self.toBST(head, (length - 1) / 2) root.right = self.toBST(mid.next, length - (length + 1) / 2) return root def findMid(self, head, length): p, i = head, 0 while i < (length - 1) / 2: p = p.next i += 1 return p
0 0
- LeetCode题解:Convert Sorted List to Binary Search Tree
- LeetCode 题解(154): Convert Sorted List to Binary Search Tree
- LeetCode(109) Convert Sorted List to Binary Search Tree
- 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[Tree]: Convert Sorted List to Binary Search Tree
- [leetcode][list][dfs] Convert Sorted List to Binary Search Tree
- LeetCode题解:Convert Sorted Array to Binary Search Tree
- LeetCode题解:Convert Sorted Array to Binary Search Tree
- LeetCode 108. Convert Sorted Array to Binary Search Tree 题解
- LeetCode题解——Convert Sorted List to Binary Search Tree
- 109. Convert Sorted List to Binary Search Tree【M】【33】【leetcode题解】
- LeetCode: Convert Sorted List to Binary Search Tree
- [LeetCode]Convert Sorted List to Binary Search Tree
- LeetCode : Convert Sorted List to Binary Search Tree
- [Leetcode] Convert Sorted List to Binary Search Tree
- Leetcode: Convert Sorted List to Balanced Binary Search Tree
- [LeetCode] Convert Sorted List to Binary Search Tree
- 【黑马程序员】分类的概念及使用流程
- Simplify Path
- Android中Bitmap,byte[],Drawable相互转化
- 总结
- 配置jdk和maven
- LeetCode 题解(154): Convert Sorted List to Binary Search Tree
- 【Android进阶篇】自定义应用权限
- 用nexus搭建maven私服
- Android AndroidManifest 清单文件以及权限详解
- Intellij IDEA 快捷键整理(TonyCody)
- 【Leetcode】Binary Tree Right Side View #199
- Binary Tree Maximum Path Sum
- atitit.javascript调用java in swt attilax 总结
- 关于git的使用记录