Skip to content

Commit bdefb30

Browse files
committed
leetcode
1 parent 523b825 commit bdefb30

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// 865. Smallest Subtree with all the Deepest Nodes
2+
// https://leetcode.com/problems/smallest-subtree-with-all-the-deepest-nodes/
3+
4+
#include <utility> // for std::pair
5+
6+
// Definition for a binary tree node.
7+
struct TreeNode {
8+
int val;
9+
TreeNode* left;
10+
TreeNode* right;
11+
TreeNode() : val(0), left(nullptr), right(nullptr) {}
12+
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
13+
TreeNode(int x, TreeNode* left, TreeNode* right)
14+
: val(x), left(left), right(right) {}
15+
};
16+
17+
// Based on Editorial's Approach 2: Recursion
18+
class Solution {
19+
public:
20+
TreeNode* subtreeWithAllDeepest(TreeNode* root) {
21+
return GetDeepest(root).second;
22+
}
23+
24+
private:
25+
std::pair<int, TreeNode*> GetDeepest(TreeNode* node) {
26+
if (node == nullptr) {
27+
return {0, nullptr};
28+
}
29+
const auto& [left_dist, left_node] = GetDeepest(node->left);
30+
const auto& [right_dist, right_node] = GetDeepest(node->right);
31+
if (left_dist > right_dist) {
32+
return {left_dist + 1, left_node};
33+
}
34+
if (right_dist > left_dist) {
35+
return {right_dist + 1, right_node};
36+
}
37+
return {left_dist + 1, node};
38+
}
39+
};

0 commit comments

Comments
 (0)