leetcode || 105、Construct Binary Tree from Preorder and Inorder Traversal
Given preorder and inorder 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) 앞의 순서는 부모 노드->왼쪽 아이->오른쪽 아이, 중간의 순서는 왼쪽 아이->아버지 노드->오른쪽 아이
(2) 앞의 순서 반복 서열의 첫 번째 요소는 부모 노드이다. 중간 순서 반복 서열에서 이 노드의 위치를 찾을 수 있다. 위치의 차이를 이용하여 왼쪽 트리의 노드 수를 계산하고 오른쪽 트리 노드의 수량을 알 수 있다.앞의 순서 반복 서열에서 아버지 노드를 제거한 후 첫 번째 요소는 아버지 노드의 왼쪽 아이이고, 앞의 순서 반복 서열의 오른쪽 트리의 첫 번째 결점은 아버지 노드의 오른쪽 아이이다.
(3) 상술한 사고방식에 따라 돌아가면 두 갈래 나무를 만들 수 있다
(4)make() 함수의 인삼 유형은vector
code:
class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
if(preorder.size()==0 || inorder.size()==0)
return NULL;
if(preorder.size()!=inorder.size())
return NULL;
return make(preorder.begin(),preorder.end(),inorder.begin(),inorder.end());
}
private:
template<class it>
TreeNode *make(it pFirst,it pLast,it qFirst,it qLast)
{
if(pFirst==pLast)
return NULL;
if(qFirst==qLast)
return NULL;
int a=*pFirst;
TreeNode *node= new TreeNode(a);
it loc=find(qFirst,qLast,a);
int left_size = loc-qFirst;
node->left=make(pFirst+1,pFirst+left_size+1,qFirst,loc);
node->right=make(pFirst+left_size+1,pLast,loc+1,qLast);
return node;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 데이터 구조 2차원 트리의 실현 코드일.두 갈래 트리 인터페이스 2 노드 클래스 3. 두 갈래 나무 구현 이 글을 통해 여러분께 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.