本文共 1251 字,大约阅读时间需要 4 分钟。
重建二叉树问题看起来简单,但其实有一定的难度。对于给定的前序遍历结果和对应的后序遍历结果,目标是根据这两个序列重新构造原来的二叉树。这个问题的核心在于正确地理解前序和后序遍历的关系,并利用递归的方法来逐步构建树。
关键在于找到二叉树的根节点,然后在前序和后序中分割左右子树。以下是详细思路:
这种方法简单直观,充分利用了递归的优势,能够高效地将序列转换为二叉树结构。
public class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { if (preorder.length == 0 || inorder.length == 0) { return null; } int rootVal = preorder[0]; int rootIndex = 0; for (int i = 0; i < inorder.length; i++) { if (inorder[i] == rootVal) { rootIndex = i; break; } } TreeNode root = new TreeNode(rootVal); root.left = buildTree(preorder, Arrays.copyOfRange(inorder, 0, rootIndex)); root.right = buildTree(preorder, Arrays.copyOfRange(inorder, rootIndex + 1, inorder.length)); return root; }}
通过以上方法,可以轻松地将给定的前序和后序遍历结果转换为二叉树结构。该算法的时间复杂度是O(n),空间复杂度也是O(n),适用于大规模数据的处理。
转载地址:http://qixyk.baihongyu.com/