解法一
根据二叉搜索树的性质找到左右子树结点在数组中的范围,递归建树。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/class Solution {public TreeNode bstFromPreorder(int[] preorder) {return build(preorder, 0, preorder.length);}private TreeNode build(int[] nums, int begin, int end) {if (begin >= end) {return null;}TreeNode root = new TreeNode(nums[begin]);int mid = begin + 1;while ((mid < end) && (nums[mid] < nums[begin])) {++mid;}root.left = build(nums, begin + 1, mid);root.right = build(nums, mid, end);return root;}}
