#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
string a, b;
int n;
struct node {
char str;
struct node *left;
struct node *right;
};
struct node *creat(int al, int ar, int bl, int br) {//建树
if (al > ar || bl > br) return NULL;
struct node *root = new node;
int k;
for (int i = 0; i < n; i++)
if (b[i] == a[al]) {
k = i;
break;
}
root->str = a[al];
root->left = creat(al + 1, al + k - bl, bl, k - 1);
root->right = creat(al + k - bl + 1, ar, k + 1, br);
return root;
}
int check(struct node *root) {//求深度
if (root == NULL)
return 0;
else
return max(check(root->left), check(root->right)) + 1;
}
int main(int argc, char const *argv[]) {
cin >> n;
cin >> a;
cin >> b;
struct node *root;
root = creat(0, a.size() - 1, 0, b.size() - 1);
printf("%d\n", check(root));
return 0;
}
7-23 还原二叉树 (25 分)
最新推荐文章于 2021-07-15 22:13:49 发布