if(preorder==null||inorder==null)return null;
TreeNode39 temp = new TreeNode39();
temp.setValue(preorder.charAt(0));
temp.setLeft(null);
temp.setRight(null);
if(proot == null)proot =temp;
if(len ==1){
return proot;
}
//寻找子树长度
//int templen =0;
int i =0;
while(preorder.charAt(0)!=inorder.charAt(i)){
i++;
if(i>=len)break;
}
//左子树长度
int leftlen=i;
//右子树长度
int rightlen = len -leftlen-1;
//重建左子树
if(leftlen>0){
//java的值传递机制,此时要重新给proot.left赋值,
proot.setLeft(ReBuild(preorder.substring(1),inorder,leftlen,proot.getLeft()));
}
//重建右子树
if(rightlen>0){
proot.setRight(ReBuild(preorder.substring(leftlen+1),inorder.substring(leftlen+1),rightlen,proot.getRight()));
}
return proot;
//中序遍历
public static void inorder(TreeNode39 root){
if(root!=null){
inorder(root.getLeft());
System.out.println(root.getValue());
inorder(root.getRight());
}
}
}
class TreeNode39{
private TreeNode39 left;
private TreeNode39 right;
private char value;
public TreeNode39 getLeft() {
return left;
}
public void setLeft(TreeNode39 left) {
this.left = left;
}
public TreeNode39 getRight() {
return right;
}
public void setRight(TreeNode39 right) {
this.right = right;
}
public char getValue() {
return value;
}
public void setValue(char value) {
this.value = value;
}
}