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

    105. 从前序与中序遍历序列构造二叉树

    前序遍历的第一个元素肯定是根节点,在中序遍历中找到该元素,左半是该节点的左子树的元素,右半是该节点的右子树元素,记左半的长度为l,前序遍历中去掉第一个元素后,前l个元素为左子树的元素,后半部分则为右子树的元素。递归处理即可。

    class Solution {
        public TreeNode buildTree(int[] preorder, int[] inorder) {
            if (preorder == null || inorder == null
                    || preorder.length == 0 || inorder.length == 0) {
                return null;
            }
    
            List<Integer> a = new ArrayList<>();
            List<Integer> b = new ArrayList<>();
    
            for (int i : preorder) {
                a.add(i);
            }
    
            for (int i : inorder) {
                b.add(i);
            }
    
            return buildTree(a, b);
        }
    
        public TreeNode buildTree(List<Integer> preorder, List<Integer> inorder) {
            TreeNode treeNode = null;
    
            Integer val = preorder.get(0);
            treeNode = new TreeNode(val);
    
            int i = inorder.indexOf(val);
    
            if (i > 0) {
                treeNode.left = buildTree(preorder.subList(1, i + 1), inorder.subList(0, i));
            }
            if (preorder.size() - i - 1 > 0) {
                treeNode.right = buildTree(preorder.subList(i + 1, preorder.size()), inorder.subList(i + 1, inorder.size()));
            }
    
            return treeNode;
        }
    
    }
    
  • 相关阅读:
    11 dubbo monitor
    svn ignore忽略文件
    Java Core Dump分析过程
    10 其他
    9 jenkins
    8 jenkins
    7 nhorizons项目结构
    6 发布个人项目到私服
    5 jenkins使用gitee
    4 Linux安装git
  • 原文地址:https://www.cnblogs.com/acbingo/p/9917621.html
Copyright © 2011-2022 走看看