PAT (Advanced Level) Practice 1020 Tree Traversals (25 point(s))

这篇博客介绍了如何根据给定的二叉树中序和后序遍历序列来构建二叉树,并提供了C++代码实现前序、中序、后序和层序遍历。通过递归函数`Build`,实现了从序列到二叉树的构造,然后分别用递归方式完成四种遍历方法的展示。这为理解和操作二叉树提供了一个实用的示例。

题目 PAT A 1020

1020

题目大意

给出二叉树的中序和后序遍历序列,输出层序遍历序列

解题思路

  • 根据中序和后序建立二叉树
  • 二叉树的遍历
  • 代码中包含了中序,后序,前序,层序遍历的代码
#include<bits/stdc++.h>
using namespace std;
struct Btree{
    int data;
    Btree *left,*right;
    Btree(int d):data(d),left(NULL),right(NULL){}
};
int postorder[31];
int inorder[31];
int cnt=0;
Btree* Build(int postL,int postR,int inL,int inR){
    if(postL>postR) return NULL;
    Btree* root=new Btree(postorder[postR]);
    int index;//在中序序列中查找,该后序元素所在的下标
    for(index=inL;index<=inR;++index){
        if(inorder[index]==postorder[postR]) break;
    }
    int leftNum=index-inL;
    root->left=Build(postL,postL+leftNum-1,inL,index-1);
    root->right=Build(postL+leftNum,postR-1,index+1,inR);
    return root;
   
}
void postOrder(Btree* root){
    if(root==NULL) return;
    postOrder(root->left);
    postOrder(root->right);
    cout<<root->data<<" ";
}
void inOrder(Btree* root){
    
    if(root==NULL) return;
    inOrder(root->left);
    cout<<root->data<<" ";
    inOrder(root->right);
   
}
void preOrder(Btree* root){    
    if(root==NULL) return;
    cout<<root->data<<" ";
    preOrder(root->left);
    preOrder(root->right);   
}

void levelOrder(Btree*root){
    queue<Btree *>q;
    q.push((root));
    while(!q.empty()){
        Btree *bt=q.front();
        q.pop();
        if(cnt==0){
            printf("%d",bt->data);
            ++cnt;
        }else printf(" %d",bt->data);
        if(bt->left!=NULL) q.push(bt->left);
        if(bt->right!=NULL) q.push(bt->right);
    }
    printf("\n");
}
int main(){
    int n;
    while(~scanf("%d",&n)){
        //给出后序和中序,求层序遍历
        for(int i=0;i<n;++i) scanf("%d",&postorder[i]);
        for(int i=0;i<n;++i) scanf("%d",&inorder[i]);
        Btree *root=Build(0,n-1,0,n-1);
        levelOrder(root);
    }
    return 0;
}
带开环升压转换器和逆变器的太阳能光伏系统 太阳能光伏系统驱动开环升压转换器和SPWM逆变器提供波形稳定、设计简单的交流电的模型 Simulink模型展示了一个完整的基于太阳能光伏的直流到交流电力转换系统,该系统由简单、透明、易于理解的模块构建而成。该系统从配置为提供真实直流输出电压的光伏阵列开始,然后由开环DC-DC升压转换器进行处理。升压转换器将光伏电压提高到适合为单相全桥逆变器供电的稳定直流链路电平。 逆变器使用正弦PWM(SPWM)开关来产生干净的交流输出波形,使该模型成为研究直流-交流转换基本操作的理想选择。该设计避免了闭环和MPPT的复杂性,使用户能够专注于光伏接口、升压转换和逆变器开关的核心概念。 此模型包含的主要功能: •太阳能光伏阵列在标准条件下产生~200V电压 •具有固定占空比操作的开环升压转换器 •直流链路电容器,用于平滑和稳定转换器输出 •单相全桥SPWM逆变器 •交流负载,用于观察实际输出行为 •显示光伏电压、升压输出、直流链路电压、逆变器交流波形和负载电流的组织良好的范围 •完全可编辑的结构,适合分析、实验和扩展 该模型旨在为太阳能直流-交流转换提供一个干净高效的仿真框架。布局简单明了,允许用户快速了解信号流,检查各个阶段,并根据需要修改参数。 系统架构有意保持模块化,因此可以轻松扩展,例如通过添加MPPT、动态负载行为、闭环升压控制或并网逆变器概念。该模型为进一步开发或整合到更大的可再生能源模拟中奠定了坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值