leetcode 124. Binary Tree Maximum Path Sum

谁践踏了优雅 2022-07-26 12:23 256阅读 0赞

Given a binary tree, find the maximum path sum.

For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.

For example:
Given the below binary tree,

  1. 1
  2. / \
  3. 2 3

Return 6.

这题要理解题目意思,否则会提交很多次的。本身这题题目意思也不明确。

来张图说明一下:

Center

对于这个二叉树,最大路径如红线所示,怎么样,意思明白了吧。注意,路线不必经过root。

  1. class Solution {
  2. struct TN
  3. {
  4. int sum;
  5. TN*left, *right;
  6. TN(int x) :sum(x){
  7. left = NULL, right = NULL;
  8. }
  9. };
  10. vector<vector<TN*>>allque;
  11. public:
  12. ~Solution()
  13. {
  14. if (!allque.empty())
  15. for (int i = 0; i < allque[0].size(); i++)
  16. delete allque[0][i];
  17. }
  18. int maxPathSum(TreeNode* root) {
  19. if (root == NULL)
  20. return 0;
  21. if (root->left == NULL&&root->right == NULL)
  22. return root->val;
  23. vector<TreeNode*>que;
  24. que.push_back(root);
  25. TN*root1 = new TN(root->val);
  26. vector<TN*>que1;
  27. que1.push_back(root1);
  28. while (!que.empty())
  29. {
  30. vector<TreeNode*>newque;
  31. vector<TN*>newque1;
  32. for (int i = 0; i < que.size(); i++)
  33. {
  34. if (que[i]->left != NULL)
  35. {
  36. TN*n = new TN(que[i]->left->val);
  37. //n->parent = que1[i];
  38. que1[i]->left = n;
  39. newque.push_back(que[i]->left);
  40. newque1.push_back(n);
  41. }
  42. if (que[i]->right != NULL)
  43. {
  44. TN*n = new TN(que[i]->right->val);
  45. //n->parent = que1[i];
  46. que1[i]->right = n;
  47. newque.push_back(que[i]->right);
  48. newque1.push_back(n);
  49. }
  50. }
  51. allque.push_back(que1);
  52. que = newque;
  53. que1 = newque1;
  54. }
  55. int maxsum = -1000000000;
  56. int imax = allque.size() - 2;
  57. for (int i = imax; i >= 0; i--)
  58. {
  59. for (int j = 0; j < allque[i].size(); j++)
  60. {
  61. int ss = -1000000000;
  62. if (allque[i][j]->left != NULL)
  63. {
  64. if (allque[i][j]->left->sum>maxsum)
  65. maxsum = allque[i][j]->left->sum;
  66. if (allque[i][j]->left->sum>ss)
  67. ss = allque[i][j]->left->sum;
  68. }
  69. if (allque[i][j]->right != NULL)
  70. {
  71. if (allque[i][j]->right->sum > maxsum)
  72. maxsum = allque[i][j]->right->sum;
  73. if (allque[i][j]->right->sum > ss)
  74. ss = allque[i][j]->right->sum;
  75. }
  76. if (allque[i][j]->left != NULL&&allque[i][j]->right != NULL
  77. &&allque[i][j]->right->sum > 0 && allque[i][j]->left->sum > 0)
  78. {
  79. if (allque[i][j]->sum + allque[i][j]->right->sum + allque[i][j]->left->sum > maxsum)
  80. maxsum = allque[i][j]->sum + allque[i][j]->right->sum + allque[i][j]->left->sum;
  81. }
  82. allque[i][j]->sum += (ss > 0 ? ss : 0);
  83. if (allque[i][j]->sum > maxsum)
  84. maxsum = allque[i][j]->sum;
  85. }
  86. for (int j = 0; j < allque[i + 1].size(); j++)
  87. delete allque[i + 1][j];
  88. allque.pop_back();
  89. }
  90. return maxsum;
  91. }
  92. };

accept

发表评论

表情:
评论列表 (有 0 条评论,256人围观)

还没有评论,来说两句吧...

相关阅读