Leetcode (105) 이전의 순서와 순서 예약 주문 이진 트리의 구성 및 C ++ 구현 해결 방안

문제 해결 아이디어 :

프리앰블에 전순 주사, 제 루트 노드는 루트 노드의 좌측 서브 트리를 모두 중위 노드의 대응하는 이전 값에서 발견 순회 순서 중위 다음 노드는, 노드 값들은 뒤쪽에있는 우측 서브 트리의 루트 노드, 당신은 이진 트리, 자사의 왼쪽 하위 트리에 각 노드, 노드 빌드 번호 오른쪽 서브 트리를 구축하기 위해 재귀를 사용할 수 있습니다.

 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        return conTree(preorder, 0, preorder.size()-1, inorder, 0, inorder.size()-1);
    }
    TreeNode* conTree(vector<int>& preorder, int pl, int pr, vector<int>& inorder, int il, int ir){
        if(pl > pr || il > ir)
            return NULL;
        TreeNode* root = new TreeNode(preorder[pl]);
        for(int i = il; i <= ir; i++){
            if(preorder[pl] == inorder[i]){
                root->left = conTree(preorder, pl+1, pl+i-il, inorder, il, i-1);
                root->right = conTree(preorder, pl+i-il+1, pr, inorder, i+1, ir);
                break;
            }
        }
        return root;
    }
};

 

 

추천

출처blog.csdn.net/gjh13/article/details/92164684