已知二叉树的前序和后序,则有多少种表示方式?
前序的第一个和后序的最后一个必是根节点,若前序的第二个和后序的倒数第二个相同,则只有一颗子树,无法确定左右,表示方式x2。否则则唯一确定。递归即得。
// Problem#: 19557
// Submission#: 4895619
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
// Problem#: 19557
// Submission#: 4895065
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[]) {
string pre;
string post;
int count = 1;
cin >> pre >> post;
for (int i = 0; i < pre.size() - 1; ++i) {
char c0 = pre[i];
char c1 = pre[i + 1];
int pos = post.find(c0);
if (pos >= 1) {
char c3 = post[pos - 1];
if (c3 == c1)
count *= 2;
}
}
cout << count;
return 0;
}
本文探讨了通过前序和后序遍历确定二叉树结构的方法。文章指出,利用前序遍历的第一个元素和后序遍历的最后一个元素可以确定根节点,并进一步解释了如何判断左右子树的存在性及数量,最终得出所有可能的二叉树结构表示形式的数量。
1万+

被折叠的 条评论
为什么被折叠?



