leetcode--ConvertSortedListtoBinarySearchTree

来源:互联网 发布:linux golang 1.8 编辑:程序博客网 时间:2024/05/29 03:36

思路:如果用数组可以直接取到中间值,因此可以用前序遍历的顺序来构建BST。但是链表如果要取中间值需要n/2的时间,因此采用中序遍历的顺序来构建BST。 这样root生成的顺序就和中序遍历的顺序一样,也就是list从前往后的顺序。

import java.util.List;/** * Created by marsares on 15/6/23. */public class ConvertSortedListtoBinarySearchTree {    ListNode ln;    public TreeNode sortedListToBST(ListNode head) {        ln=head;        return traversal(1,getLen(head));    }    public TreeNode traversal(int start,int end){        if(start>end)return null;        int mid=(start+end)/2;        TreeNode left=traversal(start,mid-1);        TreeNode root=new TreeNode(ln.val);        ln=ln.next;        TreeNode right=traversal(mid+1,end);        root.left=left;        root.right=right;        return root;    }    public int getLen(ListNode head){        if(head==null)return 0;        int len=1;        while(head.next!=null){            len++;            head=head.next;        }        return len;    }    public static void main(String[]args){        ConvertSortedListtoBinarySearchTree csltobst=new ConvertSortedListtoBinarySearchTree();        BinaryTreeSerialize bts=new BinaryTreeSerialize();        ListNode n0=new ListNode(1);        ListNode n1=new ListNode(2);        ListNode n2=new ListNode(3);        ListNode n3=new ListNode(4);        ListNode n4=new ListNode(5);        n0.next=n1;        n1.next=n2;        n2.next=n3;        n3.next=n4;        System.out.println(bts.Serialize(csltobst.sortedListToBST(n0)));    }}



0 0
原创粉丝点击