import java.util.*;
class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
if (postorder == null || postorder.length == 0) return null; // 检查postorder是否为空
TreeNode root = new TreeNode(postorder[postorder.length - 1]); // 创建根节点
if (postorder.length == 1) return root; // 如果postorder只有一个元素,返回根节点
int i;
for (i = 0; i < inorder.length; i++) {
if (inorder[i] == root.val) {
break;
}
}
int[] leftInorder = Arrays.copyOfRange(inorder, 0, i);
int[] rightInorder = Arrays.copyOfRange(inorder, i + 1, inorder.length);
int[] leftPostorder = Arrays.copyOfRange(postorder, 0, i);//左后序,和左中序的长度一样
int[] rightPostorder = Arrays.copyOfRange(postorder, i, postorder.length - 1);//删除最后一个根节点
root.left = buildTree(leftInorder, leftPostorder); // 递归构建左子树
root.right = buildTree(rightInorder, rightPostorder); // 递归构建右子树
return root;
}
}
后序+前序,构建二叉树
最新推荐文章于 2024-07-27 13:31:57 发布