이진 검색의 깊이로 구성 leetcode 이전 시퀀스 전순

이송 이진 트리는 트리의 시퀀스 전순 주사에 따라 구성된다.

참고 :
당신은 트리 요소를 복제하지 않는 것을 가정 할 수있다.

예를 들어, 주어진

전순 주사의 전순 = [3,9,20,15,7]
예약 주문 [9,3,15,20,7] inorder를 =
다음 이진 트리를 반환합니다 :

3
/ 9~20
/ 15 (7)

출처 : 버튼 (LeetCode) 유지
: 링크 https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal
아이디어 : 전순 주사 뿌리에 관한 것입니다, 예약 주문은 남아 재귀 각 좁은 루트를 찾기 위해 각 루트 노드가 내부를 가로 지르는 사전 주문에서 발견 오른쪽, 다음 단계 (

class Solution {
public:
    unordered_map<int,int> pos;//目的是快速找到一个值在inorder内的下标
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        int n=preorder.size();
        for(int i=0;i<n;++i){
            pos[inorder[i]]=i;
        }
        return dfs(preorder,inorder,0,n-1,0,n-1);
    }
    TreeNode* dfs(vector<int>& pre,vector<int>& in,int pl,int pr,int il,int ir){
        if(pl>pr)return NULL;//进行到找不到结点的时候就返回
        int len=pos[pre[pl]]-il;
        auto root = new TreeNode(pre[pl]);
        root->left=dfs(pre,in,pl+1,pl+len,il,il+len-1);
        root->right=dfs(pre,in,pl+len+1,pr,il+len+1,ir);
        return root;
    }
};

추천

출처www.cnblogs.com/clear-love/p/11291815.html