已知先序遍历和中序遍历求后序遍历
已知先序遍历和中序遍历求后序遍历
样例输入
8
1 2 4 5 7 3 6 8
4 2 7 5 1 8 6 3
样例输出
4 7 5 2 8 6 3 1
思路:通过先序遍历和中序遍历可以构造而二叉树,先序遍历的头节点是根节点,再在中序遍历中找到根节点,根节点左边是左子树,右边是右子树,依次循环,直到输入的元素插入完。至此就构成了二叉树。
代码
//
// Created by fundebug on 2021/4/16.
//
#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
using namespace std;
int *a;
int *b;
int n;
struct node{
int data;
node *left,*right;
};
void postTree(node *root){
if(root==NULL) return;
postTree(root->left);
postTree(root->right);
cout<<root->data<<" ";
}
int search(int data,int* b,int n){
for(int i=0;i<n;i++){
if(b[i]==data)
return i;
}
return -1;
}
node* buildTree(int* a,int *b, int n){
if(n<=0) return NULL;
node * root=NULL;
root=new node;
int index=search(a[0],b,n);
root->data=a[0];
root->left=buildTree(a+1,b,index);
root->right=buildTree(a+index+1,b+index+1,n-index-1);
return root;
}
int main(){
cin>>n;
a=new int[n];
b=new int[n];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
cin>>b[i];
node *root;
root=buildTree(a,b,n);
postTree(root);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现