zoukankan      html  css  js  c++  java
  • 【剑指 Offer】07.重建二叉树

    题目描述

    输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

    示例:
    前序遍历 preorder = [3,9,20,15,7]
    中序遍历 inorder = [9,3,15,20,7]
    返回如下的二叉树:
    3
    /
    9 20
    /
    15 7

    限制:
    0 <= 节点个数 <= 5000

    Java

    public class Solution07 {
        public static void main(String[] args) {
            int[] preorder = {3, 9, 20, 15, 7};
            int[] inorder = {9, 3, 15, 20, 7};
            Solution07 s = new Solution07();
            TreeNode t = s.buildTree(preorder, inorder);
            System.out.println(t);
        }
    
        /**
         * 方法一:递归重建
         * 从前序遍历中找到根节点位置,然后得到其左右子树,最后递归重建
         */
        int [] preorder;
        HashMap<Integer, Integer> map = new HashMap<>();
        public TreeNode buildTree(int[] preorder, int[] inorder) {
            this.preorder = preorder;
            for (int i = 0; i < inorder.length; ++i) {
                map.put(inorder[i], i);
            }
    
            return reBuild(0, 0, inorder.length - 1);
        }
    
        public TreeNode reBuild(int root, int left, int right) {
            if (left > right) {
                return null;
            }
    
            TreeNode node = new TreeNode(preorder[root]);   // 建立根节点
            int i = map.get(preorder[root]);    // 划分根节点、左右子树
            node.left = reBuild(root + 1, left, i - 1);
            node.right = reBuild(root + 1 + i - left, i + 1, right);
            return node;
        }
    }
    
    
    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) {
            val = x; 
        }
    
        @Override
        public String toString() {
            return "TreeNode [" + (left != null ? "left=" + left + ", " : "")
                    + (right != null ? "right=" + right + ", " : "") + "val=" + val + "]";
        }
    }
    

    C++

    
    

    Python

    
    

    总结

  • 相关阅读:
    CHAR和HEX互相转换
    Delphi之TComponent类
    Delphi 延迟函数 比sleep 要好的多
    Delphi中三种延时方法及其定时精度分析
    Cport 应用集合
    重命名数据库时提示无法用排他锁锁定数据库
    Bugzilla在XP下安装
    Web service 超过了最大请求长度
    调用webservice时提示对操作的回复消息正文进行反序列化时出错
    c# IL 指令解析
  • 原文地址:https://www.cnblogs.com/parzulpan/p/14221377.html
Copyright © 2011-2022 走看看