用Java实现二叉树输入先序遍历和中序遍历然后输出后序遍历
时间: 2024-04-29 14:21:32 浏览: 97
下面是Java实现二叉树输入先序遍历和中序遍历然后输出后序遍历的代码:
```java
public class BinaryTree {
private TreeNode root;
public BinaryTree() {
this.root = null;
}
public void buildTree(int[] preorder, int[] inorder) {
this.root = 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 inorderIndex = inStart;
while (inorderIndex <= inEnd && inorder[inorderIndex] != rootVal) {
inorderIndex++;
}
int leftSize = inorderIndex - inStart;
root.left = buildTreeHelper(preorder, preStart + 1, preStart + leftSize, inorder, inStart, inorderIndex - 1);
root.right = buildTreeHelper(preorder, preStart + leftSize + 1, preEnd, inorder, inorderIndex + 1, inEnd);
return root;
}
public void printPostorder() {
printPostorderHelper(root);
}
private void printPostorderHelper(TreeNode node) {
if (node == null) {
return;
}
printPostorderHelper(node.left);
printPostorderHelper(node.right);
System.out.print(node.val + " ");
}
private static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}
public static void main(String[] args) {
int[] preorder = {1, 2, 4, 5, 3, 6};
int[] inorder = {4, 2, 5, 1, 3, 6};
BinaryTree tree = new BinaryTree();
tree.buildTree(preorder, inorder);
tree.printPostorder(); // Output: 4 5 2 6 3 1
}
}
```
这个实现中,我们首先定义了一个内部类 `TreeNode` 表示二叉树的节点。然后,我们定义了一个 `buildTree` 方法来构建二叉树。该方法接受先序遍历和中序遍历数组,并返回二叉树的根节点。
在 `buildTree` 方法中,我们首先获取先序遍历的第一个元素作为根节点,然后在中序遍历中找到根节点的位置。我们可以用这个位置来计算左子树和右子树的大小,并递归构建左子树和右子树。
最后,我们定义了一个 `printPostorder` 方法来输出后序遍历。该方法只是调用了一个辅助方法 `printPostorderHelper`,该方法使用递归方式遍历二叉树,并输出每个节点的值。
最后,我们在 `main` 方法中创建了一个二叉树,并输出了它的后序遍历结果。
阅读全文