题目描述:
一开始没有思路,但是你可以想递归的做法,慢慢就有思路了。
preorder传入的参数作为根节点,inorder作为分隔左右子树,分隔的依据就是你传入的根节点,使用递归很简单
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length == 0){
return null;
}
int rootnum = preorder[0];
TreeNode node = new TreeNode(rootnum);
int index = 0;
int i = 0;
for (; i < inorder.length; i++) {
if(rootnum == inorder[i]){
break;
}
}
node.left = get(preorder,inorder,0,i,1);
node.right = get(preorder,inorder,i + 1,inorder.length,i + 1);
return node;
}
public TreeNode get(int []preorder,int []inorder,int start,int end,int rootnumtem){
if(start >= end){
return null;
}
int rootnum = preorder[rootnumtem];
TreeNode node = new TreeNode(rootnum);
int index = 0;
int i = 0;
for (; i < end; i++) {
if(rootnum == inorder[i]){
break;
}
}
node.left = get(preorder, inorder, start, i,rootnumtem + 1);
node.right = get(preorder, inorder, i + 1, end,rootnumtem + i - start + 1);
return node;
}
}