题目
题目链接:https://leetcode-cn.com/problems/construct-binary-search-tree-from-preorder-traversal/
题目解析:
- 使用递归法
代码
/**
* 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 {
//数组中的索引
int i = 0;
//数组
int[] preorder;
//数组的大小
int n;
public TreeNode helper(int l, int u) {
//如果数组的索引等于数组的大小则返回null
if (i == n) return null;
//将当前数组的值记录
int val = preorder[i];
//如果当前的值小于最小的值,或者大于最大的值则返回null
if (val < l || val > u)
return null;
//数组索引向前
i++;
//创建一个新的树结点
TreeNode root = new TreeNode(val);
//树的左子树递归
root.left = helper(l, val);
//树的右子树递归
root.right = helper(val, u);
//返回结点
return root;
}
public TreeNode bstFromPreorder(int[] preorder) {
//将数组变成全局变量
this.preorder = preorder;
//记录数组的大小
n = preorder.length;
//遍历
return helper(Integer.MIN_VALUE, Integer.MAX_VALUE);
}
}