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

    
    

    总结

  • 相关阅读:
    Net163网页测试
    单片机无线上网的几种方式
    5V到3V3的电平转换-串口通信
    uart rs232 rs485
    转:TI公司CC系列的各种芯片的区别
    OpenWrt 路由器固件
    cortex-m4 不能运行Linux, 可以运行 uclinux, ucos iii
    Lwip Uip
    Java-06-交换两个变量的值
    Java-05-比较equals()与== [转载]
  • 原文地址:https://www.cnblogs.com/parzulpan/p/14221377.html
Copyright © 2011-2022 走看看