本文共 1548 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要根据给定的前序遍历和中序遍历结果,重建一个二叉树。前序遍历和中序遍历都是递归的结果,我们可以利用这些结果来确定二叉树的结构。
问题分析:
[root, left, right],表示根节点访问后,先访问左子树,最后访问右子树。[left, root, right],表示先访问左子树,接着访问根节点,最后访问右子树。关键思路:
算法步骤:
i,中序遍历的左边界 left 和右边界 right。j。import java.util.HashMap;import java.util.Map;class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}public class Solution { private Map hashmap = new HashMap<>(); private int[] preorder; public TreeNode buildTree(int[] preorder, int[] inorder) { this.preorder = preorder; for (int i = 0; i < preorder.length; i++) { hashmap.put(inorder[i], i); } return recur(0, 0, inorder.length - 1); } private TreeNode recur(int i, int left, int right) { if (left > right) { return null; } int j = hashmap.get(preorder[i]); TreeNode root = new TreeNode(preorder[i]); root.left = recur(i + 1, left, j - 1); root.right = recur(i + (j - left) + 1, j + 1, right); return root; }} i 和中序左右边界 left 和 right 构建树。 j。这种方法利用了前序和中序遍历的特点,通过递归和哈希表高效地重建二叉树,确保了算法的正确性和效率。
转载地址:http://vbftz.baihongyu.com/