前言
我们知道,通过先序(后续)和中序的遍历结果,可以推知后序(前序)遍历的结果。
接下来,试着用算法实现它。
分析
先看一个例子
先序遍历的结果:ABCDEF
中序遍历的结果:CBAEDF
①由先序遍历可知,A为这颗二叉树的根节点
②再看中序遍历的结果可知,CB为二叉树的左子树,EDF为其右子树
…………
最终可以退出其后序遍历结果为:CBEFDA
此时,倘若继续分析下去,那么就是再把CB 和EDF 分别当作两个二叉树来处理,这里就可以用“递归”来实现这个算法
直到根节点没有左右子树(即左右子树的长度为0)时,便可return
实现
#include <stdio.h>
typedef struct tree{
int data;
struct tree * left;
struct tree * right;
}Bitree, *pBitree;
void Preorder(pBitree root){
if (root!=NULL){
printf("%d", root->data);
Preorder(root->left);
Preorder(root->right);
}
}//前序遍历二叉树
void hoge(char *pre, char *in, int length){
char c = pre[0];//记录根节点的值
if (length==0)
return;
if (length == 1){
printf("%c"