建树
为了满足题目的要求,我们完全可以建一棵用数组实现的完全二叉树。
从题目给的字符串我们容易得出每个叶节点的取值(B\I)。同时如果我们知道了一个结点的两个孩子节点的取值(F\B\I),就可以推导出该父结点的的取值(F\B\I)。很自然地我们决定从下往上建树。
用字符串1000来举例:
后序遍历
后序遍历用数组构建的二叉树的唯一一个比较纠结的点就是如何判断有无左右孩子。我的做法是设置一个size,大于size是即为没有该孩子结点。
代码实现
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1<<11;
char a[MAXN];
int n;
int size;
void post(int n) //后序遍历
{
if(n*2 <= size