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;
        }
    }
    
  • 相关阅读:
    链表
    std::map
    linux配置永久ip不生效解决方法
    linux命令英文缩写的含义(方便记忆)
    互联网创业其实就这24种商业模式
    当用反射获取一个model,这个model里面字段有nullable的时候,获取字段真实类型
    自定义alert和confirm
    web上传大文件的配置
    windows服务-log4net的使用
    vs中的各种快捷键
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13680703.html
Copyright © 2011-2022 走看看