package binRela;
import java.util.Arrays;
/**
* @Author GJL
* @Desription
* @Date 2017/11/23
* @Modified By:
**/
public class FindAcurateTree {
public static BinaryNode rebuildBinaryTree(int[] preOrder,int[] inOrder){
if(preOrder==null||preOrder.length==0||inOrder==null||inOrder.length==0){
return null;
}
BinaryTree tree = new BinaryTree(preOrder[0]);
int i = 0;
for (; i < inOrder.length; i++) {
if(preOrder[0]==inOrder[i]){
break;
}
}
int[] lPreOrder = Arrays.copyOfRange(preOrder,1,i+1);
int[] lInOrder = Arrays.copyOfRange(inOrder,0,i);
int[] rPreOrder = Arrays.copyOfRange(preOrder,i+1,preOrder.length);
int[] rInOrder = Arrays.copyOfRange(inOrder,i+1,inOrder.length);
tree.root.lNode = rebuildBinaryTree(lPreOrder,lInOrder);
tree.root.rNode = rebuildBinaryTree(rPreOrder,rInOrder);
return tree.root;
}
public static void main(String[] args) {
int[] preOrder ={4,1,3,5};
int[] inOrder = {1,3,4,5};
BinaryNode binaryNode = rebuildBinaryTree(preOrder,inOrder);
BinaryTree.showAllNodes(binaryNode);
}
}
class BinaryTree{
BinaryNode root;
public BinaryTree(int data) {
this.root = new BinaryNode(data);
}
public void addNode(int data){
BinaryNode node = new BinaryNode(data);
if(root == null){ root = node;return;}
BinaryNode p = root;
while(true){
if(p.data>data){
if(p.lNode == null){
p.lNode = node;
return;
}else{
p = p.lNode;
}
}else{
if(p.rNode == null){
p.rNode = node;
return;
}else{
p = p.rNode;
}
}
}
}
public static void showAllNodes(BinaryNode root){
if(root==null){
return;
}
System.out.println(root.data);
showAllNodes(root.lNode);
showAllNodes(root.rNode);
}
}
class BinaryNode{
int data;
BinaryNode lNode;
BinaryNode rNode;
public BinaryNode(int data) {
this.data = data;
}
}