新博文地址:[leetcode]Convert Sorted List to Binary Search Tree
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.
跟这道题很相似,没道理没写博文啊(= =//)算了,反正也简单,道理也一样,简单说一下吧。
这道题要求高度balance,因此可以考虑采取二分法,每次找到链表的中点,左边的一半生成左子树,右边的是右子树,这样就能够达到平衡了。但是链表如何能找到中点呢?顺序查找肯定啦。
但是不知道大家对快慢指针是否熟悉:
找中间节点
快指针每次走两步,慢指针每次走一步,当快指针走到头,慢指针刚好走到一半,当然有一些边界情况需要考虑,比如链表就一个节点的情况等等。
找到了中间节点之后呢?
前面说了左边一半是左子树,右边是右子树。因此我们要根据中间节点将原链表分裂,因此我们还需要找到中间节点的前驱节点preMid,并将preMid.next = null,这样head就代表了左子树,mid.next 就是右子树,递归。
代码如下:
public TreeNode sortedListToBST(ListNode head) { if(head == null){ return null; } ListNode mid = getMidNode(head); ListNode preMid = head; if(mid != head){//找mid的前驱节点 while(preMid.next != mid){ preMid = preMid.next; } }else{ head = null;//当mid就是head节点时,即表示左子树为空了 } preMid.next = null;//截断之后,head 表示左子树 ListNode rightHead = mid.next; TreeNode root = new TreeNode(mid.val); root.left = sortedListToBST(head); root.right = sortedListToBST(rightHead); return root; } private ListNode getMidNode(ListNode head){ if(head == null){ return null; } ListNode fast = head; ListNode slow = head; while(fast != null && fast.next != null){ try{ fast = fast.next.next; }catch(NullPointerException e){ return slow; } slow = slow.next; } return slow; }
相关推荐
python python_leetcode_109_Convert_Sorted_List_to_Binary_Search_Tree
javascript js_leetcode题解之109-convert-sorted-list-to-binary-search-tree.js
lru缓存leetcode leetcode 大批 41. First Missing Positive 广度优先搜索 773. Sliding Puzzle 864. Shortest Path to Get All Keys 深度优先搜索 996. Number of Squareful Arrays 拓扑排序 269. Alien Dictionary...
* [Binary Search Tree](https://github.com/kamyu104/LeetCode#binary-search-tree) * [Breadth-First Search](https://github.com/kamyu104/LeetCode#breadth-first-search) * [Depth-First Search]...
leetcode lintcode差异 Lintcode 解题思路记录 Table of Contents Linked List Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in ascending order, convert it ...
30. Convert Sorted List to Balanced Binary Search Tree:将有序链表转换成平衡的二叉搜索树。 31. Binary Tree Maximum Path Sum:二叉树中的最大路径和。 32. Binary Tree Upside Down:将一个二叉树进行翻转。 ...
leetcode卡 leetcode exercises 3-5 solutions everyday. fighting~ TODO array Best Time to Buy and Sell Stock II Valid Sudoku linked list Palindrome linked list Linked List Cycle trees Convert Sorted ...
- **Convert Sorted List/Array to Binary Search Tree**:将有序列表或数组转换为二叉搜索树。 - **Path Sum II**:寻找所有从根节点到叶节点的路径,其路径和等于给定的目标值。 - **Flatten Binary Tree to ...
30. Convert Sorted List to Binary Search Tree:将有序链表转换为高度平衡的二叉搜索树。 31. Binary Tree Maximum Path Sum:二叉树中的最大路径和。 32. Binary Tree Upside Down:将二叉树进行上下翻转。 五、...
在本压缩包中,我们关注的是Java编程语言与LeetCode平台上的第109题——有序链表转换为二叉搜索树(Convert Sorted List to Binary Search Tree)。这是一道涉及数据结构与算法的问题,主要涵盖了链表操作和二叉搜索...
**1.9 Convert Sorted List to Binary Search Tree (109)** - **问题描述**:给定一个链表,将其转换为平衡二叉搜索树。 - **解题思路**: - 先找到链表的中间节点作为根节点。 - 使用递归方式处理左子树和右子树...
把字符串转换成整数(Convert a string to an integer) 2018.10.8 树的子结构(Substructure of the tree) 2018.10.8 旋转数组的最小数字(Rotate The Smallest Number of Arrays) 2018.10.9 二叉搜索树的后序...
- **整数转换(Convert Integer A to Integer B)**: 将一个整数转换为另一个整数。 - **阶乘末尾0的个数(Factorial Trailing Zeroes)**: 计算一个整数阶乘结果末尾有多少个零。 - **唯一二叉搜索树(Unique Binary ...
Convert Binary Search Tree to Sorted Doubly Linked List(将二叉搜索树转换为排序的双链表)**: - 需要将二叉搜索树转换为双向链表,且链表中的节点按照排序顺序排列。 5. **LeetCode 56. Merge Intervals...