1.题目链接
2.解题思路
读完题目我们可以发现,题目所求解的其实就是从开始点到图中任意点的最大距离,但题目中所给出的二叉树是一个有向图,不支持访问其父节点,所以我们可以先从根节点深度遍历建立无向图,然后可以再次深搜或者也可以广搜,边搜边记录更新当前点到开始点的最大距离,这个最大距离就是感染二叉树的最大时间。
3.奉上代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<int> v[100010];
int maxi=0;
bool f[100010];
void dfs_ini(TreeNode* t)
{
if(t->left!=nullptr)
{
v[t->val].push_back(t->left->val);
v[t->left->val].push_back(t->val);
dfs_ini(t->left);
}
if(t->right!=nullptr)
{
v[t->val].push_back(t->right->val);
v[t->right->val].push_back(t->val);
dfs_ini(t->right);
}
}
void dfs_final(int u,int m)
{
f[u]=true;
maxi=max(maxi,m);
for(int i=0;i<v[u].size();i++)
{
if(!f[v[u][i]])
dfs_final(v[u][i],m+1);
}
}
int amountOfTime(TreeNode* root, int start) {
dfs_ini(root);
dfs_final(start,0);
return maxi;
}
};