文章
10
粉丝
224
获赞
12
访问
50.6k
先对输入的字符串进行处理,存放到模拟二叉树的数组当中(-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);
...
登录后发布评论
暂无评论,来抢沙发