此题是根据先序和中序输出后序遍历,可以灵活修改,比如输出二叉树高度等等,代码如下:
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
typedef struct Node{
int data;
struct Node *left,*right;
}Node,*Tree;
Tree create(int n,int *fir,int *mid){
Tree tree=(Tree)malloc(sizeof(Node));
if(n==0){
return 0;
}
tree->data=fir[0];
int i;
for(i=0;mid[i]!=fir[0];i++);
tree->left=create(i,fir+1,mid);
tree->right=create(n-1-i,fir+i+1,mid+i+1);
return tree;
}
void hou(Tree tree){
if(tree){
hou(tree->left);
hou(tree->right);
cout<<tree->data<<" ";
}
}
int main() {
int n;
cin>>n;
int fir[n];
int mid[n];
for(int i=0;i<n;i++){
cin>>fir[i];
}
for(int i=0;i<n;i++){
cin>>mid[i];
}
Tree tree=create(n,fir,mid);
hou(tree);
return 0;
}