根据前序遍历,中序遍历,构建二叉树
题目是牛客网的,感觉这题十分的巧妙
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
return recursion(pre,0,pre.length-1,in,0,in.length-1);
}
public TreeNode recursion(int[] pre,int preStart,int preEnd,int[] in,int inStart,int inEnd){
if(preStart>preEnd||inStart>inEnd){
return null;
}
TreeNode node=new TreeNode(pre[preStart]);
for(int i=inStart;i<=inEnd;i++){
if(pre[preStart]==in[i]){
node.left=recursion(pre,preStart+1,preStart+i-inStart,in,inStart,i-1);
node.right=recursion(pre,preStart+i-inStart+1,preEnd,in,i+1,inEnd);
break;
}
}
return node;
}
}
用了递归 加分治法。那时真的🐮🍺