LeetCode(106)Construct Binary Tree from Inorder and Postorder Traversal
Note:
You may assume that duplicates do not exist in the tree.
이전 문제와 매우 비슷하고 생각이 일치하여 코드를 직접 붙였다.
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode *buildTree_in(vector<int> &inorder, vector<int> &postorder, int in_start, int post_start, int len) {
TreeNode* root=NULL;
if(len==0)
return NULL;
if(len==1)
return new TreeNode(inorder[in_start]);
int i=0;
while(inorder[in_start+i]!=postorder[post_start+len-1])
i++;
root=new TreeNode(postorder[post_start+len-1]);
root->left=buildTree_in(inorder,postorder,in_start,post_start,i);
root->right=buildTree_in(inorder,postorder,in_start+i+1,post_start+i,len-i-1);
return root;
}
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
int len=(int)inorder.size();
if(len==0)
return NULL;
if(len==1)
return new TreeNode(inorder[0]);
return buildTree_in(inorder,postorder,0,0,len);
}
};
update:
2014 - 12- 22
사실 위의 사고방식과 기본적으로 같지만 함수 매개 변수가 약간 바뀌었을 뿐이다.
class Solution {
public:
TreeNode *buildTree(vector<int> &inorder, int in_start, int in_end, vector<int> &postorder, int post_start, int post_end) {
TreeNode* root = new TreeNode(postorder[post_end]);
if (post_start > post_end) return NULL;
else if (post_start == post_end) {
return root;
}
int index = 0;
int left_length = 0;
for (index = in_start; index <= in_end; ++index) {
if (inorder[index] == postorder[post_end])
break;
}
left_length = index - in_start;
root->left = buildTree(inorder, in_start, index - 1, postorder, post_start, post_start + left_length - 1);
root->right = buildTree(inorder, index+1, in_end, postorder, post_start + left_length, post_end - 1);
return root;
}
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
if (inorder.size() == 0 || postorder.size() == 0) return NULL;
return buildTree(inorder, 0, inorder.size() - 1, postorder, 0, postorder.size() - 1);
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.