题目描述
给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(BST)
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
Java代码实现
/**
* 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) {
return BST(head,null);
}
public TreeNode BST(ListNode head,ListNode tail){
if(head == tail)
return null;
//利用快慢指针寻找链表中间结点
ListNode slow = head;
ListNode fast = head;
while(fast != tail && fast.next != tail){
slow = slow.next;
fast = fast.next.next;
}
TreeNode root = new TreeNode(slow.val);
root.left = BST(head,slow);
root.right = BST(slow.next,tail);
return root;
}
}
题目描述
给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST).
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode sortedArrayToBST(int[] num) {
if(num == null || num.length == 0)
return null;
int start = 0;
int end = num.length;
return BTS(num, start , end);
}
public TreeNode BTS(int[] num, int start, int end){
if(start == end)
return null;
int mid = (end + start) / 2;
TreeNode root = new TreeNode(num[mid]);
root.left = BTS(num , start, mid);
root.right = BTS(num , mid + 1, end);
return root;
}
}