题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.
思路:递归即可
public class BuildTree {
public static void main(String[] args) {
int[] first = {1,2,4,7,3,5,6,8};
int[] middle = {4,7,2,1,5,3,8,6};
Node root = build(first,0,first.length-1,middle,0,middle.length-1);
System.out.println(root);
}
public static Node build(int[] first,int fs,int fe,int[] middle,int ms,int me){
if(fs>fe)
return null;
Node root = new Node(first[fs]);
int index = 0;
for(int i=ms;i<=me;i++){
if(middle[i]==first[fs]){
index = i;
break;
}
}
root.setLeft(build(first,fs+1,fs+index-ms,middle,ms,index-1));
root.setRight(build(first,fs+index-ms+1,fe,middle,index+1,me));
return root;
}
}
class Node{
private int data;
private Node left;
private Node right;
public Node(int data) {
super();
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
@Override
public String toString() {
return "Node [data=" + data + "]";
}
public Node() {
super();
}
}