-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsecond_largest_node.cpp
More file actions
64 lines (51 loc) · 1.6 KB
/
second_largest_node.cpp
File metadata and controls
64 lines (51 loc) · 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include "../TreeNode.h"
using namespace std;
TreeNode<int>* getLargestNode(TreeNode<int>* root) {
if (root == nullptr) {
return root;
}
auto largestNode = root;
for (auto child : root->children) {
auto childLargest = getLargestNode(child);
if (childLargest->data > largestNode->data) {
largestNode = childLargest;
}
}
return largestNode;
}
TreeNode<int>* getSecondLargestNode(TreeNode<int>* root) {
if (root == nullptr) {
return root;
}
TreeNode<int>* largestNode = root;
TreeNode<int>* secondLargestNode = nullptr;
for (auto child : root->children) {
auto childLargest = getLargestNode(child);
cout << "childLargest at " << child->data << " is: " << childLargest->data << endl;
cout << "largestNode is: " << largestNode->data << " and secondLargestNode is: ";
if (secondLargestNode) {
cout << secondLargestNode->data << endl;
} else {
cout << "nullptr" << endl;
}
if (secondLargestNode && childLargest->data > secondLargestNode->data) {
secondLargestNode = childLargest;
}
if (childLargest->data > largestNode->data) {
secondLargestNode = largestNode;
largestNode = childLargest;
}
}
return secondLargestNode;
}
int main() {
auto root = takeInputLevelWise();
auto secondLargest = getSecondLargestNode(root);
if (secondLargest == nullptr) {
cout << "NULL" << endl;
} else {
cout << secondLargest->data << endl;
}
return 0;
}