怎样根据前序中序创建二叉树java实现
时间: 2024-09-13 11:04:18 浏览: 37
java前序中序构造二叉树
4星 · 用户满意度95%
在Java中,根据前序和中序遍历结果重建二叉树是一个常见的算法题。前序遍历的特点是首先访问根节点,而中序遍历的特点是根节点将树分为左子树和右子树。根据这两个序列,我们可以递归地重建原始的二叉树。
以下是一个简单的实现示例:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
private int preIndex = 0;
public TreeNode buildTree(int[] preorder, int[] inorder) {
return buildTreeHelper(preorder, inorder, 0, inorder.length - 1);
}
private TreeNode buildTreeHelper(int[] preorder, int[] inorder, int inStart, int inEnd) {
if (inStart > inEnd) {
return null;
}
// 前序遍历中的第一个节点就是根节点
TreeNode root = new TreeNode(preorder[preIndex++]);
// 在中序遍历中找到根节点的位置
int inIndex = 0;
for (int i = inStart; i <= inEnd; i++) {
if (inorder[i] == root.val) {
inIndex = i;
break;
}
}
// 构建左子树和右子树
root.left = buildTreeHelper(preorder, inorder, inStart, inIndex - 1);
root.right = buildTreeHelper(preorder, inorder, inIndex + 1, inEnd);
return root;
}
}
```
这段代码定义了一个二叉树节点`TreeNode`,并在`Solution`类中提供了`buildTree`方法。该方法接受两个数组:一个是前序遍历的结果`preorder`,另一个是中序遍历的结果`inorder`。`buildTreeHelper`方法是一个递归函数,用于根据前序和中序数组构建二叉树。
阅读全文