PAT甲级题解 1043

这道题考察了平衡二叉树的建立,这个建立是需要掌握的 另外if 和else if要搞清楚

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1010;
struct node
{
    int data;
    node* left;
    node* right;
}Node[MAXN];

vector<int> preorder;
vector<int> postorder;
vector<int> mirrorPreorder;
vector<int> mirrorPostorder;

void insert(node* &root,int data)
{
    if(root == NULL)
    {
        root = new node;
        root -> data = data;
        root -> left = root -> right = NULL;
        return ;
    }
    if(data < root->data)
    {
        insert(root -> left,data);
    }
    else if(data >= root -> data)
    {
        insert(root -> right,data);
    }
}
void BstpreOrder(node* root)
{
    if(root == NULL)
    {
        return ;
    }
    preorder.push_back(root -> data);
    BstpreOrder(root -> left);
    BstpreOrder(root -> right);
}
void BstpostOrder(node* root)
{
    if(root == NULL)
    {
        return ;
    }
    BstpostOrder(root -> left);
    BstpostOrder(root -> right);
    postorder.push_back(root -> data);    
}
void MirrorpreOrder(node* root)
{
    if(root == NULL)
    {
        return ;
    }
    mirrorPreorder.push_back(root -> data);
    MirrorpreOrder(root -> right);
    MirrorpreOrder(root -> left);
}
void MirrorpostOrder(node* root)
{
    if(root == NULL)
    {
        return ;
    }
    MirrorpostOrder(root -> right);
    MirrorpostOrder(root -> left);
    mirrorPostorder.push_back(root -> data);    
}
int main(void)
{
    freopen("pat0314/in.txt","r",stdin);
    int n;
    cin>>n;
    vector<int> temporder;
    node* root = NULL;
    for(int i = 0;i<n;i++)
    {
        int num;
        cin>>num;
        temporder.push_back(num);
        insert(root,num);
    }
    BstpreOrder(root);
    BstpostOrder(root);
    MirrorpreOrder(root);
    MirrorpostOrder(root);

    bool flag = false;
    // for(int i = 0;i<preorder.size();i++)
    // {
    //     cout<<preorder[i]<<endl;
    // }
    if(temporder == preorder)
    {
        flag = true;
        cout<<"YES"<<endl;
        for(int i = 0;i<postorder.size();i++)
        {
            if(i == 0)
            {
                cout<<postorder[i];
            }
            else
            {
                cout<<" "<<postorder[i];
            }
        }
    }
    else if(temporder == mirrorPreorder)
    {
        flag = true;
        cout<<"YES"<<endl;
        for(int i = 0;i<mirrorPostorder.size();i++)
        {
            if(i == 0)
            {
                cout<<mirrorPostorder[i];
            }
            else
            {
                cout<<" "<<mirrorPostorder[i];
            }
        }
    }
    if(flag == false)
    {
        cout<<"NO";
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值