第六题要求根据所给的前序和中序遍历结果重新构建二叉树,答案里给的虽然也是递归方式,但是我没有看懂,于是自己写了一个,试了几个案例通过了,目前没发现问题。但是这里需要有一个全局变量index,用来确定当前处理的是前序数组中的哪个数,由于java不能使用指针,因此只能通过下标来确定起始位置。代码中的n1是前序数组,n2是中序数组,left是需要搜索的中序数组的起始位置,right是需要搜索的中序数组的结束位置。
public BinaryNode createBinaryNode(int[] n1, int[] n2, int left, int right) {
if (index < 0 || index >= n1.length || left > right) {
return null;
}
BinaryNode root = new BinaryNode();
int currentVal = n1[index];
index++;
root.value = currentVal;
root.left = null;
root.right = null;
for (int i = left; i <= right; i++) {
if (currentVal == n2[i]) {
root.left = createBinaryNode(n1, n2, left, i - 1);
root.right = createBinaryNode(n1, n2, i + 1, right);
}
}
return root;
}