109.有序链表转换二叉搜索树
方法:找到链表的中点,将其作为根节点
/*** 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) {return buildTree(head,null);}public TreeNode buildTree(ListNode left,ListNode right){if(left == right){return null;}ListNode mid = getMid(left,right);TreeNode root = new TreeNode(mid.val);root.left = buildTree(left,mid);root.right = buildTree(mid.next,right);return root;}public ListNode getMid(ListNode left,ListNode right){ListNode fast = left;ListNode slow = left;while(fast.next != right && fast.next.next != right){fast = fast.next.next;slow = slow.next;}return slow;}//找到链表的中间节点作为根节点
}