要用Java编写一个程序,字据给定的二叉树的前序遍历(Preorder Traversal)和中序遍历(Inorder Traversal)成果来重建二叉树,咱们不错按照以下本事进行: 1. 清醒遍历特质: - 前序遍历的法例是:根节点 - 左子树 - 右子树,其中根节点老是第一个节点。 - 中序遍历的法例是:左子树 - 根节点 - 右子树,其中根节点将左子树和右子树分开。 2. 递归构建二叉树: - 使用前序遍历的第一个节点手脚刻下子树的根节点。 - 在中序遍历中找到该根节点的位置,从而离别
要用Java编写一个程序,字据给定的二叉树的前序遍历(Preorder Traversal)和中序遍历(Inorder Traversal)成果来重建二叉树,咱们不错按照以下本事进行:
1. 清醒遍历特质:
- 前序遍历的法例是:根节点 -> 左子树 -> 右子树,其中根节点老是第一个节点。
- 中序遍历的法例是:左子树 -> 根节点 -> 右子树,其中根节点将左子树和右子树分开。
2. 递归构建二叉树:
- 使用前序遍历的第一个节点手脚刻下子树的根节点。
- 在中序遍历中找到该根节点的位置,从而离别出左子树和右子树的中序遍历成果。
- 字据左子树和右子树的中序遍历成果长度,离别出前序遍历中对应的左子树和右子树的前序遍历成果。
- 递归地构建左子树和右子树。
3. 斥逐代码:
```java
// 界说二叉树节点类
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class ReconstructBinaryTree {
// 主函数,用于测试
public static void main(String[] args) {
// 示例输入
int[] preorder = {3, 9, 20, 15, 7};
int[] inorder = {9, 3, 15, 20, 7};
// 重建二叉树
TreeNode root = buildTree(preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1);
// 打印二叉树(这里简短打印中序遍历成果以考据)
printInOrder(root);
}
// 字据前序和中序遍历成果重建二叉树的递归函数
public static TreeNode buildTree(int[] preorder, int[] inorder, int preStart, int preEnd, int inStart, int inEnd) {
if (preStart > preEnd J9体育网