LeetCode 매일 1문제: 중순과 후순을 통해 두 갈래 나무 만들기

1242 단어

문제 설명


Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree.

문제 분석


중순과 후순을 통해 두 갈래 트리를 만들 수 있으며, 수조에 중복된 숫자가 있는 것을 고려할 필요가 없다.뒷순서를 통해 우리는 루트 노드 (마지막) 를 찾을 수 있으며, 귀속으로 트리를 만들면 된다.

코드 구현

public TreeNode buildTree(int[] inorder, int[] postorder) {
        if (inorder.length == 0 || postorder.length == 0) return null;
        return creatTree(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);
    }

    private TreeNode creatTree(int[] inorder, int inStart, int inEnd,
                               int[] postorder, int postStart, int postEnd) {
        if (inStart > inEnd || postStart > postEnd) return null;
        TreeNode root = new TreeNode(postorder[postEnd]);
        for (int i = 0; i < postorder.length; i++) {
            if (inorder[i] == postorder[postEnd]) {// , 
                root.left = creatTree(inorder, inStart, i - 1, postorder, postStart, postStart - inStart + i - 1);
                root.right = creatTree(inorder, i + 1, inEnd, postorder, postStart - inStart + i, postEnd - 1);
            }
        }
        return root;
    }

좋은 웹페이지 즐겨찾기