zoukankan      html  css  js  c++  java
  • LeetCode 105 从前序与中序遍历序列构造二叉树

    LeetCode 105 从前序与中序遍历序列构造二叉树
    问题描述:
    根据一棵树的前序遍历与中序遍历构造二叉树。
    注意:

    • 你可以假设树中没有重复的元素。

    例如,给出

    前序遍历 preorder = [3,9,20,15,7]
    中序遍历 inorder = [9,3,15,20,7]

    返回如下的二叉树:

    3
    /
    9 20
    /
    15 7
    执行用时:4 ms, 在所有 Java 提交中击败了47.35%的用户
    内存消耗:38.9 MB, 在所有 Java 提交中击败了93.03%的用户

    递归:

    class Solution {
        public TreeNode buildTree(int[] inorder, int[] postorder) {
            return buildTree(inorder, postorder, new int[]{0, inorder.length-1}, new int[]{0, postorder.length-1});
        }
         
        public TreeNode buildTree(int[] inorder, int[] postorder, int[] range1 ,int[] range2) {
            //递归终止
            if(range1[0]>=range1[1] || range2[0]>=range2[1]) {
                return range1[0]==range1[1]? new TreeNode(inorder[range1[0]]): null;
            }
            //从inorder中找到当前根节点
            int rootVal = inorder[range1[0]];
            int leftTreeEnd = 0, rightTreeStart = 0;
            //在postorder中找到root的左右子树节点范围
            for(int i=range2[0]; i<=range2[1]; i++) {
                if(rootVal==postorder[i]) {
                    leftTreeEnd = i-1;
                    rightTreeStart = i+1;
                }
            }
            TreeNode root = new TreeNode(rootVal);
            //递归构建左右子树
            TreeNode leftRoot = buildTree(inorder, postorder, 
                new int[]{range1[0]+1, range1[0]+leftTreeEnd+1-range2[0]}, 
                new int[]{range2[0], leftTreeEnd}
            );
            TreeNode rightRoot = buildTree(inorder, postorder, 
                new int[]{range1[0]+leftTreeEnd+2-range2[0], range1[1]},
                new int[]{rightTreeStart, range2[1]} 
            );
            root.left = leftRoot;
            root.right = rightRoot;
    
            return root;
        }
    }
    
  • 相关阅读:
    使用iText 7读取PDF文件中的文本和图片
    登记或取消登记盈亏库存日记账行数量
    uni-app(未完)
    javaScript的基本优雅写法
    ModuleFederation-模块联邦
    typescript
    img标签src图片路径根目录问题
    开源工具分享
    软件缺陷的度量、分析和统计
    MIT6.824 2020 Lab2 A Raft Leader Election
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13680703.html
Copyright © 2011-2022 走看看