用JAVA写一个代码根据二叉树的前序和中序输出一个二叉树
时间: 2024-09-13 07:13:13 浏览: 52
C语言二叉树的三种遍历方式的实现及原理
5星 · 资源好评率100%
在Java中,我们可以使用递归的方式来构建二叉树,给定前序遍历(根节点 -> 左子树 -> 右子树)和中序遍历(左子树 -> 根节点 -> 右子树),由于中序遍历可以确定每个节点的位置,我们可以通过这个信息找到根节点及其左右子树。
首先,我们需要定义一个简单的二叉树节点类`TreeNode`:
```java
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
```
然后,我们可以创建一个函数`buildTree`来重构二叉树:
```java
public TreeNode buildTree(int[] preOrder, int[] inOrder) {
if (preOrder == null || preOrder.length == 0 || inOrder == null || inOrder.length == 0) {
return null;
}
// 中序遍历找到根节点
int rootValIndex = binarySearch(inOrder, preOrder[0]);
// 构建根节点
TreeNode root = new TreeNode(preOrder[0]);
// 使用中序遍历找到根节点在数组中的位置
int i = rootValIndex;
// 从后向前查找前序遍历中的根节点,在中序遍历中对应的右子树
for (int j = preOrder.length - 1; j >= 1; j--) {
// 已经访问过的元素不再考虑
while (i > 0 && inOrder[i] != preOrder[j]) {
i--;
}
// 更新根节点和其对应子树
root.right = new TreeNode(preOrder[j]);
i--;
// 移动到下一个节点
root.left = new TreeNode(inOrder[i + 1]);
}
return root;
}
private int binarySearch(int[] arr, int target) {
int low = 0;
int high = arr.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return low;
}
```
阅读全文