package com.interview.books.leetcodeoj; import com.interview.leetcode.utils.ListNode; import com.interview.leetcode.utils.TreeNode; /** * Created_By: stefanie * Date: 14-12-26 * Time: 下午3:10 */ public class LOJ109_ConvertSortedListToBST { //base in-order traversal to build a tree. //use current to tracking visited node in list, and length to tracking when to return. //left part is length/2, the right part is length - 1 - length/2; ListNode current; public TreeNode sortedListToBST(ListNode head) { if(head == null) return null; current = head; int length = length(head); return buildTree(length); } public int length(ListNode head){ int length = 0; while(head != null){ length++; head = head.next; } return length; } public TreeNode buildTree(int length){ if(length == 0) return null; TreeNode left = buildTree(length / 2); TreeNode node = new TreeNode(current.val); current = current.next; node.left = left; node.right = buildTree(length - 1 - length/2); return node; } }