您的位置:首页 > 其它

Convert Sorted List to Binary Search Tree

2014-12-28 11:32 330 查看

Convert Sorted List to Binary Search Tree

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

这道题我开始超时了,后面想了个投机取巧的办法。想转换成数组,然后使用上面一道题的方法

/**
* 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 root ;
public int nums[];

public TreeNode sortedListToBST(ListNode head) {
ListNode temp = head;
int length = 0;
while(temp != null){
length ++;
temp = temp.next;
}
nums = new int[length];
temp = head;
for(int i = 0; i < nums.length; i++){
nums[i] = temp.val;
temp = temp.next;
}
return sortedArrayToBST(nums);
}

public TreeNode sortedArrayToBST(int[] num) {
if(num.length == 0)
return root;
if(1 == num.length){
return new TreeNode(num[0]);
}
int middle = num.length / 2;
root = new TreeNode(num[middle]);

createBST(num, 0, middle - 1);
createBST(num, middle + 1, num.length - 1);
return root;
}

/**
* 根据num数组,创建一棵二叉查找树
* @param num
* @param start
* @param end
*/
private void createBST(int num[], int start, int end){
int middle = 0;
if(start <= end && start >= 0 && end <num.length){
middle = (start + end) / 2;

insertNode(root, num[middle]);

createBST(num, start, middle - 1);
createBST(num, middle + 1, end);
}
}

/**
* 向root所指的BST二叉查找树中插入value
* @param root
* @param value
*/
private void insertNode(TreeNode root, int value){
if(value > root.val){                    //比根节点大,在右子树插入
if(root.right == null){
root.right = new TreeNode(value);
}else{
root = root.right;
insertNode(root, value);
}
}
else{
if(root.left == null){
root.left = new TreeNode(value);
}else{
root = root.left;
insertNode(root, value);            //比根节点小的插入左子树
}
}
}

/**
* 先序遍历
* @param root
*/
public void preTravel(TreeNode root){
if(root != null){
//            System.out.print(root.val + " ");
preTravel(root.left);
preTravel(root.right);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: