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;
        }
    
    }
    
  • 相关阅读:
    链表实现
    @Aspect
    mybatis plus
    using
    50道题
    梦想,青春,时间
    存储过程!!!
    事务,视图,索引
    高级查询--嵌套和相关,两套分页!!!
    学习笔记
  • 原文地址:https://www.cnblogs.com/acbingo/p/9917621.html
Copyright © 2011-2022 走看看