Skip to content

Commit 6e12676

Browse files
authored
Create find-all-the-lonely-nodes.cpp
1 parent 8afcc04 commit 6e12676

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

C++/find-all-the-lonely-nodes.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Time: O(n)
2+
// Space: O(h)
3+
4+
/**
5+
* Definition for a binary tree node.
6+
* struct TreeNode {
7+
* int val;
8+
* TreeNode *left;
9+
* TreeNode *right;
10+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
11+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
12+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
13+
* };
14+
*/
15+
class Solution {
16+
public:
17+
vector<int> getLonelyNodes(TreeNode* root) {
18+
vector<int> result;
19+
vector<TreeNode *> stk = {root};
20+
while (!stk.empty()) {
21+
auto node = stk.back(); stk.pop_back();
22+
if (!node) {
23+
continue;
24+
}
25+
if (node->left && !node->right) {
26+
result.emplace_back(node->left->val);
27+
} else if (node->right && !node->left) {
28+
result.emplace_back(node->right->val);
29+
}
30+
stk.emplace_back(node->right);
31+
stk.emplace_back(node->left);
32+
}
33+
return result;
34+
}
35+
};
36+
37+
// Time: O(n)
38+
// Space: O(h)
39+
class Solution2 {
40+
public:
41+
vector<int> getLonelyNodes(TreeNode* root) {
42+
vector<int> result;
43+
dfs(root, &result);
44+
return result;
45+
}
46+
47+
private:
48+
void dfs(TreeNode *node, vector<int> *result) {
49+
if (!node) {
50+
return;
51+
}
52+
if (node->left && !node->right) {
53+
result->emplace_back(node->left->val);
54+
} else if (node->right && !node->left) {
55+
result->emplace_back(node->right->val);
56+
}
57+
dfs(node->left, result);
58+
dfs(node->right, result);
59+
}
60+
};

0 commit comments

Comments
 (0)