输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
import java. util. Arrays;
class TreeNode {
int value;
TreeNode left;
TreeNode right;
public TreeNode ( int value) {
this . value= value;
}
}
public class Test04 {
public TreeNode reConstructBinaryTree ( int [ ] pre, int [ ] in) {
if ( pre. length== 0 || in. length== 0 ) {
return null;
}
if ( pre. length!= in. length) {
return null;
}
TreeNode root= new TreeNode ( pre[ 0 ] ) ;
for ( int i = 0 ; i< pre. length; i++ ) {
if ( pre[ 0 ] == in[ i] ) {
root. left= reConstructBinaryTree ( Arrays. copyOfRange ( pre, 1 , 1 + i) , Arrays. copyOfRange ( in, 0 , i) ) ;
root. right= reConstructBinaryTree ( Arrays. copyOfRange ( pre, i+ 1 , pre. length) , Arrays. copyOfRange ( in, i+ 1 , in. length) ) ;
}
}
return root;
}
public static void main ( String[ ] args) {
Test04 t4= new Test04 ( ) ;
int [ ] pre= { 1 , 2 , 4 , 7 , 3 , 5 , 6 , 8 } ;
int [ ] in = { 4 , 7 , 2 , 1 , 5 , 3 , 8 , 6 } ;
TreeNode result= t4. reConstructBinaryTree ( pre, in) ;
}
}