当前位置:编程学习 > JAVA >>

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.
java code :
 
/** 
 * 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) {  
        // IMPORTANT: Please reset any member data you declared, as  
        // the same Solution instance will be reused for each test case.  
        if(head == null)  
            return null;  
        int len = 0;  
        ListNode tmp = head;  
        while(tmp != null)  
        {  
            len++;tmp = tmp.next;  
        }  
        int[] array = new int[len];  
        int i = 0;  
        tmp = head;  
        while(tmp != null)  
        {  
            array[i++] = tmp.val;  
            tmp = tmp.next;  
        }  
        TreeNode root = null;  
        root = recursion(array, 0, i-1, root);  
        array = null;  
        return root;  
    }  
    public TreeNode recursion(int[] array, int lhs, int rhs, TreeNode root)  
    {  
        if(lhs <= rhs)  
        {  
            int mid = (lhs + rhs) >> 1;  
            root = new TreeNode(array[mid]);  
            root.left = recursion(array, lhs, mid - 1, root.left);  
            root.right = recursion(array, mid + 1, rhs, root.right);  
        }  
        return root;  
    }  
}  

 

 
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,