• 剑指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; } }
  • 相关阅读:
    logback学习二
    logback学习
    弱类型、强类型、动态类型、静态类型语言的区别
    BlockingQueue
    ExecutorService
    Future学习
    SetTimeout()多次运行函数后越来越快的问题
    LISTAGG函数
    Oracle字段
    使用powerdesigner进行数据库设计
  • 原文地址:https://www.cnblogs.com/luo-c/p/13648770.html
Copyright © 2020-2023  润新知