중차 범람과 후차 범람 트리 구조 두 갈래 나무
1765 단어 데이터 구조와 알고리즘
예:
나무의 중서 역행을 제시한다:[1,2,3]과 후서 역행:[1,3,2]
다음 트리로 돌아갑니다.
/ \
1 3
전편의 를 참고하여 우리는 중서가 왼쪽->중->우이고, 후서가 왼쪽->우->중이라는 것을 안다.따라서 후차 역행의 마지막 값은 바로 뿌리 노드의 값이다. 이 값에 따라 우리는 중차 역행에서 뿌리 노드의 왼쪽 트리와 오른쪽 트리의 값을 찾아 왼쪽 트리와 오른쪽 트리를 구성하면 된다.
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
*@param inorder : A list of integers that inorder traversal of a tree
*@param postorder : A list of integers that postorder traversal of a tree
*@return : Root of a tree
*/
public:
TreeNode *construct(vector &inorder, vector &postorder,
int is, int ie, int ps, int pe) {
TreeNode * root = new TreeNode(postorder[pe]);
if (ps == pe) return root;
int i;
for (i = 0; i < ie; i++) {
if (inorder[i] == root->val) break;
}
if (i-1 >= is) {
root->left = construct(inorder, postorder, is, i-1, ps, ps+i-1-is);
}
if (i+1 <= ie) {
root->right = construct(inorder, postorder, i+1, ie, ps+i-is, pe-1);
}
return root;
}
TreeNode *buildTree(vector &inorder, vector &postorder) {
if (inorder.empty() || postorder.empty() ||
inorder.size() != postorder.size()) return NULL;
return construct(inorder, postorder, 0, inorder.size()-1, 0, postorder.size()-1);
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무의 깊이가 두루 다니다텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.