利用前序序列和中序序列建立一棵二叉树并遍历
#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <queue>
using namespace std;
struct TreeNode{
char data;
TreeNode *lChild;
TreeNode *rChild;
TreeNode(){}
TreeNode(char d):data(d),lChild(NULL),rChild(NULL){}
};
//采用递归方式进行构造二叉树
TreeNode* Build(string preStr,string orderStr){
if(preStr.size() == 0){
return NULL;
}
char c = preStr[0];
TreeNode *root = new TreeNode(c);
//TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
//root->data = c;
int position = orderStr.find(c);
root->lChild = Build(preStr.substr(1,position),orderStr.substr(0,position));
root->rChild = Build(preStr.substr(position+1),orderStr.substr(position+1));
return root;
}
//根据前序遍历方式遍历一颗二叉树
void postOrder(TreeNode *root){
if(root == NULL){
return ;
}
printf("%c",root->data);
postOrder(root->lChild);
postOrder(root->rChild);
}
//根据中序遍历方式遍历一颗二叉树
void postOrder(TreeNode *root){
if(root == NULL){
return ;
}
postOrder(root->lChild);
printf("%c",root->data);
postOrder(root->rChild);
}
//根据后序遍历方式遍历一颗二叉树
void postOrder(TreeNode *root){
if(root == NULL){
return ;
}
postOrder(root->lChild);
postOrder(root->rChild);
printf("%c",root->data);
}
int main(){
//根据数的先序和中序遍历
//计算出它的后序遍历并输出
string preStr;
string orderStr;
while(cin >> preStr >> orderStr){
TreeNode *root = Build(preStr,orderStr);
postOrder(root);
printf("\n");
}
}