Java 由后序序列post和中序序列in构造唯一的二叉链,并输出结果
时间: 2024-05-09 19:15:11 浏览: 65
可以通过递归的方式来构造二叉树。由于后序序列的最后一个元素为根节点,可以先找到根节点,然后在中序序列中找到根节点的位置,从而确定左子树和右子树的中序序列。再根据左右子树的中序序列长度,可以在后序序列中确定左右子树的后序序列。如此递归构造即可。
以下是 Java 代码实现:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
if (inorder == null || postorder == null || inorder.length != postorder.length) {
return null;
}
return buildTreeHelper(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);
}
private TreeNode buildTreeHelper(int[] inorder, int inStart, int inEnd, int[] postorder, int postStart, int postEnd) {
if (inStart > inEnd || postStart > postEnd) {
return null;
}
int rootVal = postorder[postEnd];
int rootIndex = 0;
for (int i = inStart; i <= inEnd; i++) {
if (inorder[i] == rootVal) {
rootIndex = i;
break;
}
}
int leftSubtreeSize = rootIndex - inStart;
TreeNode root = new TreeNode(rootVal);
root.left = buildTreeHelper(inorder, inStart, rootIndex - 1, postorder, postStart, postStart + leftSubtreeSize - 1);
root.right = buildTreeHelper(inorder, rootIndex + 1, inEnd, postorder, postStart + leftSubtreeSize, postEnd - 1);
return root;
}
}
```
其中,buildTree 方法是对外暴露的接口,接受两个数组作为参数。buildTreeHelper 方法是递归构造二叉树的实现方法。在 buildTreeHelper 方法中,inStart 和 inEnd 分别表示当前递归处理的中序序列的起始位置和结束位置,postStart 和 postEnd 分别表示当前递归处理的后序序列的起始位置和结束位置。rootVal 表示当前递归处理的子树的根节点的值,rootIndex 表示根节点在中序序列中的位置。leftSubtreeSize 表示左子树的节点个数。最后,通过递归构造左子树和右子树,返回整棵二叉树的根节点。
阅读全文