題目描述
輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果裹芝,請(qǐng)重建出該二叉樹穿稳。假設(shè)輸入的前序遍歷和中序遍歷的結(jié)果中都不含重復(fù)的數(shù)字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6}旱眯,則重建二叉樹并返回铐姚。
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
int length = pre.length - 1;
return recursion(pre, 0, length, in, 0, length);
}
public TreeNode recursion(int [] pre, int preL, int preR, int [] in, int inL, int inR) {
int val = pre[preL];
TreeNode node = new TreeNode(val);
if(preL == preR) {
node.left = null;
node.right = null;
return node;
}
int i = inL;
for(; i <= inR; i++) {
if(in[i] == val){
break;
}
}
int distance = i - inL;
if(distance > 0)
node.left = recursion(pre, preL + 1, preL + distance, in, inL, i - 1);
if(distance < preR - preL)
node.right = recursion(pre, preL + distance + 1, preR, in, i + 1, inR);
return node;
}
public static void main(String[] args) {
int [] pre = {1,2,4,7,3,5,6,8};
int [] in = {4,7,2,1,5,3,8,6};
Solution obj = new Solution();
obj.reConstructBinaryTree(pre, in);
}
}