知道前序中序求后序java,给出算法和结果
时间: 2024-09-06 14:01:35 浏览: 35
Java二叉搜索树遍历操作详解【前序、中序、后序、层次、广度优先遍历】
前序、中序遍历可以用来恢复二叉树结构,然后通过这个结构计算后序遍历。这里提供一种简单的Java方法实现:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public String buildTreeFromPreAndInOrder(int[] pre, int[] in, int start, int end) {
if (start > end) return null;
// 使用中序遍历找到根节点
int rootVal = in[start];
TreeNode root = new TreeNode(rootVal);
int i = 0, j = 0;
while (i < pre.length && j + 1 <= end) {
if (pre[i] == rootVal) {
root.left = buildTreeFromPreAndInOrder(pre, in, start + 1, j);
i++;
} else {
root.right = buildTreeFromPreAndInOrder(pre, in, j + 1, end - 1);
j++;
}
}
return root;
}
// 使用前序和中序遍历来获取后序遍历序列
public String postorderTraversal(TreeNode root) {
if (root == null) return "";
StringBuilder sb = new StringBuilder();
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
// 如果节点还有右子节点,先将其入栈
if (node.right != null) stack.push(node.right);
// 再将左子节点入栈
if (node.left != null) stack.push(node.left);
// 当前节点已访问完,添加到后序序列
sb.append(node.val).append(" ");
}
return sb.toString().trim(); // 移除末尾空格
}
```
在这个例子中,`buildTreeFromPreAndInOrder`函数用于根据给定的前序和中序遍历数组构建一颗二叉树,然后`postorderTraversal`函数利用后序遍历的基本性质——“左->右->根”(即先左孩子,再右孩子,最后当前节点),从已经建立好的树上取出后序遍历。
如果你有具体的前序和中序遍历数组,可以直接调用这两个函数得到后序遍历的结果。如果需要帮助,告诉我你的前序和中序数组的具体内容,我可以帮你计算出后序遍历。
阅读全文