本文共 1864 字,大约阅读时间需要 6 分钟。
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
给出:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1.前序遍历 [root | left | right],递归中用 i 表示索引
中序遍历 [left | root | right],递归中用 j 表示索引 2. 递归的参数有三个:作者:edelweisskoko
链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/solution/jian-zhi-offer-07-zhong-jian-er-cha-shu-2j9vf/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
private Maphashmap = new HashMap<>();
for(int i =0;i
TreeNode root=new TreeNode(preorder[i]);
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { private Maphashmap = new HashMap<>(); private int[] preorder; public TreeNode buildTree(int[] preorder, int[] inorder) { this.preorder=preorder; for(int i=0;i right){ return null; } TreeNode root=new TreeNode(preorder[i]);//定义一颗以preorder[0]树根的树 int j=hashmap.get(preorder[i]);//找到树根root在中序遍历中的位置 root.left=recur(i+1,left,j-1); root.right=recur(i-left+j+1,j+1,right); return root; } }