01.给出二叉树的 前序数组,和中序数组,请还原二叉树
思路:按照笔算的思路,从前序节点开始遍历,找到对应节点在中序节点的位置,然后判断出哪些节点是该节点是左子节点,哪些是右子节点,中序又点二分的味道。
同时,根据中序区分左右,前序遍历的时候,需要跳过已经处理过的节点
import java.util.HashMap; public class Solution { public int[] pre; public int[] mid; public HashMap<Integer ,Integer> map=new HashMap<>(); public TreeNode reConstructBinaryTree(int [] pre,int [] in) { this.pre=pre; this.mid=in; for(int i=0;i<in.length;i++){ map.put(in[i],i); } return pre(0,pre.length-1,0,in.length-1); } public TreeNode pre(int pi,int pj,int mi,int mj){ if(mi>mj||pi>pj) return null; TreeNode node=new TreeNode(pre[pi]); int index=map.get(pre[pi]); node.left=pre(pi+1,pi+index-mi,mi,index-1); node.right=pre(pi+index-mi+1,pj,index+1,mj); return node; } }
原文:https://www.cnblogs.com/yidiandianwy/p/13603898.html