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; } }
  • 相关阅读:
    java1.5新特性
    [转载]传智播客_SQL入门
    集合类的应用
    多线程的应用
    包的使用
    异常的应用finally与总结
    自定义异常以及runtime类
    异常的处理
    SpringMVC_05 利用spring框架来处理异常
    SpringMVC_04 拦截器 【拦截器的编程步骤】【session复习?】
  • 原文地址:https://www.cnblogs.com/luo-c/p/13648770.html
Copyright © 2011-2022 走看看