思路
先序遍历:根{左孩子}{右孩子}
中序遍历:{左孩子}根{右孩子}
后序遍历:{左孩子}{右孩子}根
根据当前先序遍历的第一个元素可以确定该元素是当前树的根结点,从中序遍历中找到该结点,该结点左边是左子树,右边是右子树,递归上述过程,直到当前先序遍历序列长度为0
转化函数代码
static class Node {
int key;
Node leftChild;
Node rightChild;
public Node(int key) {
this.key = key;
this.leftChild = null;
this.rightChild = null;
}
}
static Node init(int[] preOrder, int[] inOrder) {
if(preOrder.length > 0 && inOrder.length > 0){
Node root = new Node(preOrder[0]);
int i;
for(i = 0 ; i < inOrder.length ; i++)
if(inOrder[i] == preOrder[0])
break;
root.leftChild = init(Arrays.copyOfRange(preOrder, 1, 1+i), Arrays.copyOfRange(inOrder, 0, 0+i));
root.rightChild = init(Arrays.copyOfRange(preOrder, 1+i, preOrder.length), Arrays.copyOfRange(inOrder, 1+i, inOrder.length));
return root;
}
else
return null;
}