返回与给定先序遍历 preorder
相匹配的二叉搜索树(binary searchtree)的根结点。
(回想一下,二叉搜索树是二叉树的一种,其每个节点都满足以下规则,对于 node.left
的任何后代,值总 <
node.val
,而 node.right
的任何后代,值总 >
node.val
。此外,先序遍历首先显示节点的值,然后遍历 node.left
,接着遍历 node.right
。)
示例:
输入:[8,5,1,7,10,12] 输出:[8,5,10,1,7,null,12]
提示:
1 <= preorder.length <= 100
- 先序
preorder
中的值是不同的。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode bstFromPreorder(int[] preorder) { TreeNode current = new TreeNode(preorder[0]); int num=preorder.length; for(int i=1;i<preorder.length;i++){ if(preorder[i]>preorder[0]){ num=i; break; } } if(num-1>0){ int[] left=new int[num-1]; for(int i=0;i<num-1;i++){ left[i]=preorder[i+1]; } current.left=bstFromPreorder(left); } if(preorder.length-num>0){ int[] right=new int[preorder.length-num]; for(int i= num;i<preorder.length;i++){ right[i-num]=preorder[i]; } current.right=bstFromPreorder(right); } return current; } }