0
点赞
收藏
分享

微信扫一扫

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

根据一棵树的前序遍历与中序遍历构造二叉树

https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

示例1:

Java解法

package sj.shimmer.algorithm.m3_2021;

import java.util.Arrays;

import sj.shimmer.algorithm.TreeNode;

/**
 * Created by SJ on 2021/3/21.
 */

class D55 {
    public static void main(String[] args) {
        TreeNode root = buildTree(new int[]{3, 9, 20, 15, 7}, new int[]{9, 3, 15, 20, 7});
        System.out.println(root);
    }
    public static TreeNode buildTree(int[] preorder, int[] inorder) {
        //- 前序遍历[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]
        //- 中序遍历[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]
        if (preorder == null||preorder.length==0||inorder==null||inorder.length==0) {
            return null;
        }
        int length = inorder.length;
        for (int i = 0; i < length; i++) {
            if (inorder[i]==preorder[0]) {
                TreeNode root = new TreeNode(inorder[i]);
                //左子树长度
                int left = i;
                //前序 左子树
                int[] tempLeftP = Arrays.copyOfRange(preorder, 1, left+1);
                int[] tempLeftI = Arrays.copyOfRange(inorder, 0, left);
                root.left = buildTree(tempLeftP, tempLeftI);
                //前序 右子树
                int[] tempRightP = Arrays.copyOfRange(preorder, left+1, length);
                int[] tempRightI = Arrays.copyOfRange(inorder, left+1, length);
                root.right = buildTree(tempRightP, tempRightI);
                return root;
            }
        }
        return null;
    }
}

官方解

https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solution/cong-qian-xu-yu-zhong-xu-bian-li-xu-lie-gou-zao-9/

  1. 递归

    • 时间复杂度:O(n)
    • 空间复杂度:O(n)
  2. 迭代

举报

相关推荐

0 条评论