该题主要是用递归的方式循环调用;
int len = pre.length; TreeNode tn = new TreeNode(pre[0]);//根节点 if(len==1){ return tn; } int j; for(j = 0; j<len;j++){//遍历中序节点 if(pre[0] == in[j]){ break; } }
//左子树 if(j>0){ int[] lpre = new int[j]; int[] lin = new int[j]; for(int i =0;i<j;i++){ lpre[i] = pre[i+1]; lin[i] = in[i]; } tn.left = reConstructBinaryTree(lpre, lin); }else{ tn.left = null; }
//右子树 if(len-j-1>0) { int[] rpre = new int[len-j-1]; int[] rin = new int[len-j-1]; for(int i =j+1;i<len;i++){ rpre[i-j-1] = pre[i]; rin[i-j-1] = in[i]; } tn.right = reConstructBinaryTree(rpre, rin); }else{ tn.right = null; } return tn;