测试地址:☞
【题目描述】
由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示。我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。
现给出扩展二叉树的先序序列,要求输出其中序和后序序列。
【输入】
扩展二叉树的先序序列。
【输出】
输出其中序和后序序列。
【输入样例】
ABD..EF..G..C..【输出样例】
DBFEGAC DFGEBCA【思路】
输入先序序列,存储在数组中,递归 k*2 为左子树,k*2+1 为右子树,遇到 ' . ' 停止,之后输出中序和后序遍历。
【AC代码】
#include<cstdio> char d[1010]; void pre_order(int k){ scanf("%c", &d[k]); if(d[k] == '.') return; pre_order(k*2); pre_order(k*2+1); } void in_order(int k){ if(d[k] == '.') return; in_order(k*2); printf("%c", d[k]); in_order(k*2+1); } void hide_order(int k){ if(d[k] == '.') return; hide_order(k*2); hide_order(k*2+1); printf("%c", d[k]); } int main(){ pre_order(1); in_order(1); printf("\n"); hide_order(1); return 0; }
