diff --git a/LeetCode/src/main/java/com/code/leet/study/t20210209/SortedListToBST.java b/LeetCode/src/main/java/com/code/leet/study/t20210209/SortedListToBST.java new file mode 100644 index 0000000..d490e34 --- /dev/null +++ b/LeetCode/src/main/java/com/code/leet/study/t20210209/SortedListToBST.java @@ -0,0 +1,53 @@ +package com.code.leet.study.t20210209; + +import com.code.leet.entiy.ListNode; +import com.code.leet.entiy.TreeNode; + +/** + * 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 + *
+ * 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 + *
+ * 示例: + *
+ * 给定的有序链表: [-10, -3, 0, 5, 9], + *
+ * 一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: + *
+ * 0 + * / \ + * -3 9 + * / / + * -10 5 + *
+ * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ +public class SortedListToBST { + /** + * 109. 有序链表转换二叉搜索树 + */ + public TreeNode sortedListToBST(ListNode head) { + if (head == null) { + return null; + } else if (head.next == null) { + return new TreeNode(head.val); + } + ListNode beforeMid = head; + ListNode mid = head; + ListNode last = head; + while (last != null && last.next != null) { + beforeMid = mid; + mid = mid.next; + last = last.next.next; + } + + beforeMid.next = null; + TreeNode root = new TreeNode(mid.val); + root.left = sortedListToBST(head); + root.right = sortedListToBST(mid.next); + + return root; + } +}