返回与给定的前序和后序遍历匹配的任何二叉树。
pre
和 post
遍历中的值是不同的正整数。
示例:
输入:pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7,3,1] 输出:[1,2,3,4,5,6,7]
提示:
1 <= pre.length == post.length <= 30
pre[]
和post[]
都是1, 2, ..., pre.length
的排列- 每个输入保证至少有一个答案。如果有多个答案,可以返回其中一个。
分析 输入必然是满二叉树
然后就木有然后了
画个图
附榜上dalao的AC答案
class Solution {
public:
TreeNode* constructFromPrePost(vector<int>& pre, vector<int>& post) {
TreeNode* root = new TreeNode(pre[0]);
vector<TreeNode*> st = {root};
int at = 0;
for (int i = 1; i < pre.size(); i++) {
TreeNode* cur = new TreeNode(pre[i]);
if (st.back()->left == NULL)
st.back()->left = cur;
else
st.back()->right = cur;
st.push_back(cur);
while (!st.empty() && at != post.size() && post[at] == st.back()->val)
at++, st.pop_back();
}
return root;
}
};