//https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/
//重建二叉树
//前序:root+左+右 // 每一个左右子树都满足root+左+右这个性质
//中序: 左+root+右 // 每一个每一个左右子树都满足左+root+右这个性质
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder==null||inorder==null){
return null;
}
Map<Integer,Integer> map =new HashMap();
for (int i=0; i<inorder.length;i++) {
map.put(inorder[i],i);
}
return buildTree(preorder,inorder,0,preorder.length-1,0,inorder.length-1,map);
}
public TreeNode buildTree(int[] preorder, int[] inorder, int preStart, int preEnd, int inStart, int inEnd, Map<Integer,Integer> map) {
if(preStart>preEnd){
return null;
}
TreeNode root=new TreeNode(preorder[preStart]);
int index=map.get(preorder[preStart]);
int leftNodes=index-inStart;
root.left=buildTree(preorder,inorder,preStart+1,preStart+leftNodes,inStart,index-1,map);
root.right=buildTree(preorder,inorder,preStart+leftNodes+1,preEnd,index+1,inEnd,map);
return root;
}
}
重建二叉树
最新推荐文章于 2021-11-01 11:03:57 发布