文章

10

粉丝

224

获赞

12

访问

46.2k

头像
数组模拟完全二叉树(DFS)
推荐阅读
P994 复旦大学2021年机试题
发布于2022年5月28日 10:45
阅读数 5.8k

先对输入的字符串进行处理,存放到模拟二叉树的数组当中(-1表示叶子结点)。

对于数组中的节点i,它的左右孩子分别是2i和2i+1(完全二叉树的性质)

dfs搜索左右子树,pre记录搜索路径中的最大值。若index超出数组长度或遇到-1则结束搜索。若当前节点>=pre,则是新的最大值,res+1。继续dfs(左子树)和dfs(右子树)

#include <bits/stdc++.h>
using namespace std;

vector<int> nums;

void split(string &s)
{
    int val = 0;
    for (int i = 0; i < s.length(); i++)
    {
        if (s[i] >= '0' && s[i] <= '9')
            val = val * 10 + s[i] - '0';
        else if (s[i] == ',')
        {
            nums.push_back(val);
            val = 0;
        }
        else
            val = -1;
    }
    nums.push_back(val);
}

int res = 0;

void dfs(int pre, int index)
{
    if (index >= nums.size())
        return;
    if (nums[index] == -1)
        return;
    if (nums[index] >= pre)
    {
        res++;
        pre = nums[index];
    }
    dfs(pre, index * 2);
    dfs(pre, index * 2 + 1);
}

int main()
{
    string s;
    nums.push_back(0);
 ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发