使用Java根据前中序,后中序生成二叉树
时间: 2024-09-06 10:02:35 浏览: 47
建立二叉树,并输出二叉树的先序,中序和后序遍历序列,以及二叉树的叶子数
在Java中,根据二叉树的前序遍历和中序遍历结果,或者中序遍历和后序遍历结果来重建原始的二叉树是二叉树重建问题的两种情况。以下是使用前序遍历和中序遍历结果重建二叉树的示例代码:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class BinaryTreeReconstruction {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return buildTreeHelper(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);
}
private TreeNode buildTreeHelper(int[] preorder, int preStart, int preEnd, int[] inorder, int inStart, int inEnd) {
if (preStart > preEnd || inStart > inEnd) return null;
int rootVal = preorder[preStart];
TreeNode root = new TreeNode(rootVal);
int inRoot = inStart;
while (inorder[inRoot] != rootVal) {
inRoot++;
}
int leftTreeSize = inRoot - inStart;
root.left = buildTreeHelper(preorder, preStart + 1, preStart + leftTreeSize, inorder, inStart, inRoot - 1);
root.right = buildTreeHelper(preorder, preStart + leftTreeSize + 1, preEnd, inorder, inRoot + 1, inEnd);
return root;
}
}
```
在这个代码中,`buildTree` 方法接收前序遍历数组和中序遍历数组作为输入,并调用 `buildTreeHelper` 辅助方法来递归地构建二叉树。在 `buildTreeHelper` 方法中,首先确定根节点的值,然后根据这个值在中序遍历数组中找到根节点的位置,这样可以确定左子树和右子树的大小。接着,递归地为左子树和右子树构建树。
同样的方法也可以根据中序遍历和后序遍历结果来重建二叉树,只是在确定根节点时选择后序遍历数组的最后一个元素,并适当地调整递归构建左右子树的逻辑。
阅读全文