leetcode || 106、Construct Binary Tree from Inorder and Postorder Traversal

problem:
Given inorder and postorder traversal of a tree, construct the binary tree.
Note: You may assume that duplicates do not exist in the tree.
Hide Tags
 
Tree Array Depth-first Search
제목: 두 갈래 나무의 중차 역행 서열과 후속 역행 서열을 정하고 이 두 갈래 나무를 구축하는 것도 고전적이다
thinking:
(1) 이런 유형의 문제는 예를 들어 그 규칙을 찾아내야 한다.두 갈래 나무(1,2,3,4,5,6,7)에 대한 중서 역력: 4,2,5,1,6,3,7 후속 역력: 4,5,2,6,7,3,1
먼저 뿌리 결점 1은 후속 역행 서열의 마지막 위치에서 중차 역행 서열에서find1의 위치, 1은 왼쪽 나무, 1은 오른쪽 나무입니다.하위 트리 노드 수량을 알면,
마찬가지로 후속 역행 서열도 좌우 트리를 구분할 수 있다.
(2) 상기 과정을 반복한다
code:
class Solution {
  public:
      TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
          if (inorder.size() == 0)
              return NULL;
          return make(inorder.begin(),inorder.end(),postorder.begin(),postorder.end());    
      }
  protected:
      template<class it>
      TreeNode *make(it pFirst,it pLast,it qFirst,it qLast)
      {
          if(pFirst==pLast)
              return NULL;
          it loc1 = qLast-1;
          int a = *loc1;
          it loc2=find(pFirst,pLast,a);
          int left_size=loc2-pFirst;
          TreeNode *root=new TreeNode(a);
          root->left=make(pFirst,loc2,qFirst,qFirst+left_size);
          root->right=make(loc2+1,pLast,qFirst+left_size,qLast-1);
          return root;
      }
  };

좋은 웹페이지 즐겨찾기