☘前言☘
今日份水题开始。希望有想要提高的同学跟我们一起来刷题0.0
4.12日每日一题——美国血统
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
⏳全文大约阅读时间: 20min
P1827 [USACO3.4] 美国血统 American Heritage
解题思路
这部分其实是考研的重点,太长时间不用都快忘记了,其实思路就是分割字符串,比如给的样例。
ABEDFCHG
CBADEFGH分割之后的样子就应该是:
[ABEDF]C[HG]
C[BADEF][GH]这个对应着代码去看下标就能理解了。
#include <cstdio>
#include <cstring>
#include <cstdlib>
struct node{
char val;
struct node *left, *right;
};
struct node *noot;
char zhongxu[30], prev[30];
void create(int zleft, int zright, int pleft,int pright,node **root){//生成树
if(zleft > zright || pleft > pright) return;//直接就是空啦
int i,j;
for(i = pleft, j = zleft;i < pright;i++,j++) //查找分割点
if(zhongxu[j] == prev[pleft]) break;
(*root) = (struct node *)malloc(sizeof(struct node)); //建立节点
node *p = *root;
p->val = prev[pleft];
p->left = p->right = NULL;
create(zleft,j-1,pleft+1, i,&p->left); //创建左子树
create(j+1,zright,i+1,pright,&p->right); //创建右子树
}
void hou(node *p){ //后续遍历
if(p){
hou(p->left);
hou(p->right);
putchar(p->val);
}
}
int main(){
scanf("%s %s",zhongxu,prev);
node *root;
create(0,strlen(zhongxu) - 1,0, strlen(prev) - 1,&root);
hou(root);
}
📑写在最后
今天就这样,明日再见0.0