//模拟中序遍历构造二叉树 private TreeNode help(int begin,int end) { if (begin > end)//这里的判断很重要,跟数组很像 return null; int mid = (begin + end) / 2; TreeNode left=help(begin,mid-1);//按照中序遍历的顺序先构造左子树 TreeNode node = new TreeNode(current.val); node.left = left; current = current.next; node.right = help(mid + 1, end);//再构造右子树 return node; }
public TreeNode SortedListToBST(ListNode head) { current = head; int length = 0; while (head != null) { length++; head = head.next; } if (length == 0) return null; return help(1,length); }