第一行为二叉树的中序序列第二行为二叉树的后序序列输出数据一行为二叉树的先序序列C++
#include
struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} };
TreeNode* buildTree(vector
int rootVal = postorder[n-1];
TreeNode* root = new TreeNode(rootVal);
int rootIndex = 0;
for (int i = 0; i < n; i++) {
if (inorder[i] == rootVal) {
rootIndex = i;
break;
}
}
vector<int> leftInorder(inorder.begin(), inorder.begin()+rootIndex);
vector<int> rightInorder(inorder.begin()+rootIndex+1, inorder.end());
vector<int> leftPostorder(postorder.begin(), postorder.begin()+rootIndex);
vector<int> rightPostorder(postorder.begin()+rootIndex, postorder.end()-1);
root->left = buildTree(leftInorder, leftPostorder);
root->right = buildTree(rightInorder, rightPostorder);
return root;
}
void preorderTraversal(TreeNode* root) { if (root == NULL) return;
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
int main() {
vector
TreeNode* root = buildTree(inorder, postorder);
preorderTraversal(root);
return 0;
原文地址: https://www.cveoy.top/t/topic/hQ7g 著作权归作者所有。请勿转载和采集!