leetcode105.从前序与中序遍历序列构造二叉树

用一个map存储inorder的值和下标的对应关系,这样做的目的可以省略用for查找的时间,直接取preorder[p_start]的值对应在inorder中对应值的下标。

inorder在主要是为了确定以preoder[p_start]为根的的左右子树的长度,便于下次的递归。

边界是:p_start==p_end return null;

递归的逻辑:

root = new TreeNode(pre[pstart]);

root.left = helper(preoder,p_start+1,p_start+left_num+1,inorder,i_start,i_mid,map); //这里下一次的的左子树的起点是p_start+1,终点的下一个结点是真实下标+1,即p_start+left_num+1.然后此时的中序遍历也需要写成左边界。

root.right = helper(preoder,p_start+left_num+1,inorder,mid+1,i_end,map);

return root;

原文地址:https://www.cnblogs.com/kltsee/p/12885643.html