dfs求教80
查看原帖
dfs求教80
1631254
shore_bobo楼主2025/1/6 19:51

自己写的纯递归80分,#17~#20、#22WA,自己电脑跑#17栈溢出

#include<bits/stdc++.h>

using namespace std;

const int N = 1e6 + 10;

struct Node {
    int value;
    int left, right;
} tree[N];

bool cmp(int left, int right) {
    if (left == -1 && right == -1) return true;
    if (left * right < 0) return false;

    return (tree[left].value == tree[right].value) && cmp(tree[left].left, tree[right].right) && cmp(
               tree[left].right, tree[right].left);
}

int sum(int root) {
    if (root == -1) return 0;

    return sum(tree[root].left) + sum(tree[root].right) + 1;
}

int dfs(int root) {
    int res = 0;
    if (root == -1) return 0;
    if (tree[root].left == -1 && tree[root].right == -1) return 1;

    if (cmp(tree[root].left, tree[root].right)) res = 2 * sum(tree[root].left) + 1;

    return max(res, max(dfs(tree[root].left), dfs(tree[root].right)));
}

int main() {
    int n;
    cin >> n;

    for (int i = 1; i <= n; i++) cin >> tree[i].value;
    for (int i = 1; i <= n; i++) cin >> tree[i].left >> tree[i].right;

    cout << dfs(1) << endl;

    return 0;
}

看题解减去一个递归76分,#17~22WA,自己电脑跑#17栈溢出

#include<bits/stdc++.h>

using namespace std;

const int N = 1e6 + 10;

struct Node {
    int value;
    int left, right;
} tree[N];

bool cmp(int left, int right) {
    if (left == -1 && right == -1) return true;
    if (left * right < 0) return false;

    return (tree[left].value == tree[right].value) && cmp(tree[left].left, tree[right].right) && cmp(
               tree[left].right, tree[right].left);
}

int sum(int root) {
    if (root == -1) return 0;

    return sum(tree[root].left) + sum(tree[root].right) + 1;
}

int main() {
    int n, res = 0;
    cin >> n;

    for (int i = 1; i <= n; i++) cin >> tree[i].value;
    for (int i = 1; i <= n; i++) cin >> tree[i].left >> tree[i].right;

    for (int i = 1; i <= n; i++) if (cmp(i, i)) res = max(res, sum(i));

    cout << res;

    return 0;
}

我自己电脑直接跑题解#17也是栈溢出

2025/1/6 19:51
加载中...