105_从前序与中序遍历序列构造二叉树

简介: 105_从前序与中序遍历序列构造二叉树

105_从前序与中序遍历序列构造二叉树

 

package 二叉树.BT;
import java.awt.HeadlessException;
import java.util.HashMap;
import java.util.Map;
/**
 * https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
 * 
 * @author Huangyujun
 *
 */
public class _105_从前序与中序遍历序列构造二叉树 {
    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;
        }
    }
    /**
     * preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
     * 前序特点:第一个便是根结点(知道根比较快),中序:左 根 右
     * 前序提供的根结点, 中序不断地划分成左子树、右子树
     * @param preorder
     * @param inorder
     * @return
     */
    //定义一个 map,键值对,【值, 位置】
    Map<Integer, Integer> map = new HashMap<>();
    int[] inorder;
    int[] preorder;
    int pre_id = 0;
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        this.preorder = preorder;
        this.inorder = inorder;
        int n = inorder.length;
        for(int i = 0; i < n; i++) {
            map.put(inorder[i], i);
        }
        return helper(0, n - 1);
    }
    //构建的helper(表示一棵树的范围)
    public TreeNode helper(int left, int right) {
        if(left > right)    return null;    
         int rootVal = preorder[pre_id];
        //创建根结点
        TreeNode root = new TreeNode(rootVal);
        //下标++ ,方便下次拿到左子树的根结点
        pre_id++;
        //获取根在中序的位置,将分成两个树
        int index = map.get(rootVal);
        //左子树
        root.left = helper(left, index - 1);
        //右子树
        root.right = helper(index + 1, right);
        return root;
    }
}
目录
相关文章
|
8月前
|
Java C++ 索引
leetcode-106:从中序与后序遍历序列构造二叉树
leetcode-106:从中序与后序遍历序列构造二叉树
60 0
【LeetCode】105. 从前序与中序遍历序列构造二叉树
题目描述: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例:
69 0
|
3月前
|
存储 索引 Python
从中序与后序遍历序列构造二叉树
【10月更文挑战第13天】这段内容介绍了一种基于中序和后序遍历序列构建二叉树的方法。通过识别后序遍历中的根节点,并利用中序遍历划分左右子树,进而递归构建整棵树。文中提供了具体示例及Python代码实现,并分析了该方法的时间与空间复杂度。
141 0
21_从中序与后序遍历序列构造二叉树
21_从中序与后序遍历序列构造二叉树
|
C++ 索引
从前序与中序遍历序列构造二叉树(C++实现)
从前序与中序遍历序列构造二叉树(C++实现)
108 1
|
C++ 索引
从中序与后序遍历序列构造二叉树(C++实现)
从中序与后序遍历序列构造二叉树(C++实现)
91 1
|
8月前
|
C++ 索引 Python
leetcode-105:从前序与中序遍历序列构造二叉树
leetcode-105:从前序与中序遍历序列构造二叉树
51 0
|
C++
力扣 - 106、从中序与后序遍历序列构造二叉树
力扣 - 106、从中序与后序遍历序列构造二叉树
106 0
|
机器学习/深度学习
每日三题-对称二叉树、从前序与中序遍历序列构造二叉树、不同的二叉搜索树
每日三题 对称二叉树 从前序与中序遍历序列构造二叉树 不同的二叉搜索树
103 4
每日三题-对称二叉树、从前序与中序遍历序列构造二叉树、不同的二叉搜索树