/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
private int v=0;
private Map inoredrRes;
public TreeNode buildTree(int[] preorder, int[] inorder) {
//判断入参是否为空
if(preorder==null||preorder.length==0) return null;
//新建一个map存入中序遍历的顺序
inoredrRes = new HashMap<>();
for(int i = 0;i<inorder.length;++i){
inoredrRes.put(inorder[i],i);
}
return buildTree(preorder,inorder,0,preorder.length-1);
}
public TreeNode buildTree(int[] preorder, int[] inorder,int low,int up){
//如果最低边界大于最高边界 返回空值
if(low>up) return null;
int var = preorder[v++];
//构建根节点
TreeNode root = new TreeNode(var);
int inorderIndex = (int)inoredrRes.get(var);
//构建左节点
root.left = buildTree(preorder, inorder, low, inorderIndex-1);
//构建右节点
root.right = buildTree(preorder, inorder,inorderIndex+1,up);
return root;
}
}
每日一题算法题---构建二叉树(根据先序遍历和中序遍历)
最新推荐文章于 2024-06-28 11:28:22 发布