Convert Sorted List to Binary Search Tree

来源:互联网 发布:ubuntu怎么打开输入法 编辑:程序博客网 时间:2024/05/04 23:38

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

由于已经有序,所以利用二分法创建这棵平衡二叉树,与Sort List类似

需要注意的就是一条链的后半条链的索引范围是[0,high - mid - 1],原来一直纠结在high - mid;

其次,就是注意后半条链的链头。

/** * 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) {        int len = 0;        ListNode p = head;        while(p != null){            len++;            p = p.next;        }        return create(head,0,len - 1);    }    public TreeNode create(ListNode head, int low , int high){        if(low > high ){            return null;        }        int mid = (low + high) >> 1;        int count = 0;        ListNode p = head;        while(count < mid){            p = p.next;            count++;        }        TreeNode t = new TreeNode(p.val);        t.left = create(head,0,mid-1);        t.right = create(p.next,0,high - mid - 1);        return t;    }}

Runtime: 281 ms

0 0
原创粉丝点击