本题虽然看起来很长,但是真的不难写,耐心写就完事了,注意不要忘记引用函数
#include<cstdio>
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
const int maxn=1010;
int n;
vector<int> ans,pre,mirr,prepos,mirrpos;
struct node
{
int data;
node* lchild,*rchild;
};
node* newNode(int x)
{
node* root=new node;
root->data=x;
root->lchild=NULL;
root->rchild=NULL;
return root;
}
void insert(node *&root,int x)
{
if(root==NULL)
{
root=newNode(x);
return;
}
if(x>=root->data)
insert(root->rchild,x);
else
insert(root->lchild,x);
}
void creatmirr(node *root)
{
if(root==NULL)
return ;
mirr.push_back(root->data);
creatmirr(root->rchild);
creatmirr(root->lchild);
}
void creatpre(node *root)
{
if(root==NULL)
return;
pre.push_back(root->data);
creatpre(root->lchild);
creatpre(root->rchild);
}
void creatprepos(node *root)
{
if(root==NULL)
return;
creatprepos(root->lchild);
creatprepos(root->rchild);
prepos.push_back(root->data);
}
void creatmirrpos(node *root)
{
if(root==NULL)
return;
creatmirrpos(root->rchild);
creatmirrpos(root->lchild);
mirrpos.push_back(root->data);
}
int main()
{
cin>>n;
node* root=NULL;
int data;
for (int i=0;i<n;i++)
{
scanf("%d",&data);
insert(root,data);
ans.push_back(data);
}
creatpre(root);
creatmirr(root);
creatprepos(root);
creatmirrpos(root);
if(ans==pre)
{
printf("YES\n");
for(int i=0;i<n;i++)
{
printf("%d",prepos[i]);
if(i!=n-1)
printf(" ");
}
}
else if(ans==mirr)
{
printf("YES\n");
for(int i=0;i<n;i++)
{
printf("%d",mirrpos[i]);
if(i!=n-1)
printf(" ");
}
}
else
{
printf("NO\n");
}
}
本文详细介绍了如何使用C++实现二叉树的先序、中序、后序遍历,以及创建二叉树的镜像。通过具体的代码示例,展示了节点插入、遍历和镜像创建的过程,为理解二叉树的数据结构提供了实践指南。
321

被折叠的 条评论
为什么被折叠?



