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

    class Solution {
        public TreeNode buildTree(int[] preorder, int[] inorder) {
            if(preorder.length == 0) return null;
            TreeNode res = new TreeNode(preorder[0]);
            int idx = -1;
            for(int i = 0; i < preorder.length; i++){
                if(inorder[i] == preorder[0]){
                    idx = i;break; // 找到前序的根,在中序中的位置,因为通过中序的位置下标,可以得出:根左边有几个节点,根的右边有几个节点。这是不容易想通的,想通了这一点,就好办了。
    因为可以确定出前序遍历中,属于根节点左边的数组,同理,右边也是。同理,中序中,也能切割出两块
    } } res.left = this.buildTree(Arrays.copyOfRange(preorder,1,1+idx), Arrays.copyOfRange(inorder,0,idx)); res.right = this.buildTree(Arrays.copyOfRange(preorder,1+idx, preorder.length), Arrays.copyOfRange(inorder,idx+1,inorder.length)); return res; } }
  • 相关阅读:
    websocket 学习笔记
    oxy 学习笔记
    postcss
    一致性hash和chord
    leveldb 学习笔记
    logrus 学习笔记
    viper 学习笔记
    redigo 学习笔记
    gin 学习笔记
    修改TOMCAT的JVM虚拟机内存大小几种方式
  • 原文地址:https://www.cnblogs.com/luo-c/p/13648770.html
Copyright © 2011-2022 走看看