fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using ll = long long;
  5.  
  6. struct TreeNode{
  7. int val;
  8. TreeNode* left;
  9. TreeNode* right;
  10.  
  11. TreeNode(int val):val(val),left(nullptr),right(nullptr){};
  12. };
  13. int ans = 0;
  14. int dfs(TreeNode* root,int tar,int &dist){
  15. if(!root)return 0;
  16.  
  17. int ld,rd = -1;
  18.  
  19. int lh = dfs(root->left,tar,ld);
  20. int rh = dfs(root->left,tar,rd);
  21.  
  22. if(root->val == tar){
  23. dist = 0;
  24. ans = max(ans,max(lh,rh));
  25. }else if(ld != -1){
  26. dist = ld+1;
  27. ans = max(ans,rh);
  28. }else if(rd != -1){
  29. dist = rd+1;
  30. ans = max(ans,lh);
  31. }
  32. return 1+max(lh,rh);
  33. }
  34. int burn(TreeNode* root,int tar){
  35. if(!root)return 0;
  36. ans = 0;
  37. int dist = -1;
  38. dfs(root,tar,dist);
  39. return ans;
  40. }
  41. TreeNode* buildTree(){
  42. int x; cin>>x;
  43. if(x == -1)return nullptr;;
  44.  
  45. TreeNode* root = new TreeNode(x);
  46. queue<TreeNode*>q;
  47. q.push(root);
  48.  
  49. while(!q.empty()){
  50. auto u = q.front();
  51. q.pop();
  52.  
  53. if(cin>>x && x!=-1){
  54. u->left = new TreeNode(x);
  55. q.push(u->left);
  56. }
  57.  
  58. if(cin>>x && x!=-1){
  59. u->right = new TreeNode(x);
  60. q.push(u->right);
  61. }
  62. }
  63. return root;
  64. }
  65.  
  66. int main() {
  67. TreeNode* root = buildTree();
  68. int val;cin>>val;
  69. cout<<burn(root,val);
  70.  
  71.  
  72. return 0;
  73. }
Success #stdin #stdout 0s 5316KB
stdin
1 2 3 4 5 6 7 
2
stdout
3