109. 有序链表转换二叉搜索树
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:0/ \-3 9/ /-10 5
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; next = null; }* }*/ /*** Definition for binary tree* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/ public class Solution {public TreeNode sortedListToBST(ListNode head) {if (head == null) {return null;}int end = 0;ListNode it = head;while(it.next != null) {it = it.next;end = end +1;}return build(head,0,end);}public TreeNode build(ListNode head,int start,int end) {if (start > end) {return null;} // if (start == end) { // return new TreeNode(head.val); // }//mid取值注意,测试用例不是按常规mid取值的,加不加以都是对的int mid = start + (end-start+1)/2;ListNode midNode = head;for (int i=start;i<mid;i++) {midNode = midNode.next;}TreeNode treeNode= new TreeNode(midNode.val);treeNode.left = build(head,start,mid-1);treeNode.right = build(midNode.next,mid+1,end);return treeNode;} }
108. 将有序数组转换为二叉搜索树
(1过)
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/ \-3 9/ /-10 5
public class ConvertSortedArrayToBinarySearchTree {public TreeNode sortedArrayToBST(int[] num) {if (num == null || num.length <=0) {return null;}return helper(num,0,num.length-1);}public TreeNode helper(int[] num,int start, int end) {if (start > end) {return null;}int mid = start + (end-start+1)/2;TreeNode node = new TreeNode(num[mid]);node.left = helper(num,start,mid - 1);node.right = helper(num,mid+1,end);return node;} }