109:有序链表转换二叉搜索树
This commit is contained in:
parent
967e0d87f1
commit
c159731fa3
@ -0,0 +1,84 @@
|
|||||||
|
//给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
|
||||||
|
//
|
||||||
|
// 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
|
||||||
|
//
|
||||||
|
// 示例:
|
||||||
|
//
|
||||||
|
// 给定的有序链表: [-10, -3, 0, 5, 9],
|
||||||
|
//
|
||||||
|
//一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:
|
||||||
|
//
|
||||||
|
// 0
|
||||||
|
// / \
|
||||||
|
// -3 9
|
||||||
|
// / /
|
||||||
|
// -10 5
|
||||||
|
//
|
||||||
|
// Related Topics 深度优先搜索 链表
|
||||||
|
// 👍 533 👎 0
|
||||||
|
|
||||||
|
package leetcode.editor.cn;
|
||||||
|
|
||||||
|
import com.code.leet.entiy.ListNode;
|
||||||
|
import com.code.leet.entiy.TreeNode;
|
||||||
|
|
||||||
|
//109:有序链表转换二叉搜索树
|
||||||
|
public class ConvertSortedListToBinarySearchTree {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
//测试代码
|
||||||
|
Solution solution = new ConvertSortedListToBinarySearchTree().new Solution();
|
||||||
|
}
|
||||||
|
//力扣代码
|
||||||
|
//leetcode submit region begin(Prohibit modification and deletion)
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* public class ListNode {
|
||||||
|
* int val;
|
||||||
|
* ListNode next;
|
||||||
|
* ListNode() {}
|
||||||
|
* ListNode(int val) { this.val = val; }
|
||||||
|
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Definition for a binary tree node.
|
||||||
|
* public class TreeNode {
|
||||||
|
* int val;
|
||||||
|
* TreeNode left;
|
||||||
|
* TreeNode right;
|
||||||
|
* TreeNode() {}
|
||||||
|
* TreeNode(int val) { this.val = val; }
|
||||||
|
* TreeNode(int val, TreeNode left, TreeNode right) {
|
||||||
|
* this.val = val;
|
||||||
|
* this.left = left;
|
||||||
|
* this.right = right;
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//leetcode submit region end(Prohibit modification and deletion)
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
<p>给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。</p>
|
||||||
|
|
||||||
|
<p>本题中,一个高度平衡二叉树是指一个二叉树<em>每个节点 </em>的左右两个子树的高度差的绝对值不超过 1。</p>
|
||||||
|
|
||||||
|
<p><strong>示例:</strong></p>
|
||||||
|
|
||||||
|
<pre>给定的有序链表: [-10, -3, 0, 5, 9],
|
||||||
|
|
||||||
|
一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:
|
||||||
|
|
||||||
|
0
|
||||||
|
/ \
|
||||||
|
-3 9
|
||||||
|
/ /
|
||||||
|
-10 5
|
||||||
|
</pre>
|
||||||
|
<div><div>Related Topics</div><div><li>深度优先搜索</li><li>链表</li></div></div>\n<div><li>👍 533</li><li>👎 0</li></div>
|
Loading…
Reference in New Issue
Block a user