Skip to content

Commit de4b9de

Browse files
author
Bhrigu Kansra
authored
Merge pull request bhrigukansra#126 from InnovativeCoder/master
Pair sum using Inorder BST done
2 parents 565b5d3 + 5022b53 commit de4b9de

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed

.DS_Store

-2 KB
Binary file not shown.

pair sum using inorder BST.cpp

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#include <stack>
2+
3+
int countNodes(BinaryTreeNode<int> *root) {
4+
if(root == NULL) {
5+
return 0;
6+
}
7+
return countNodes(root -> left) + countNodes(root -> right) + 1;
8+
}
9+
10+
void printNodesSumToS(BinaryTreeNode<int> *root, int s) {
11+
if(root == NULL) {
12+
return;
13+
}
14+
int totalCount = countNodes(root);
15+
int count = 0;
16+
stack<BinaryTreeNode<int>*> inorder;
17+
stack<BinaryTreeNode<int>*> revInorder;
18+
BinaryTreeNode<int> *temp = root;
19+
while(temp != NULL) {
20+
inorder.push(temp);
21+
temp = temp -> left;
22+
}
23+
temp = root;
24+
while(temp != NULL) {
25+
revInorder.push(temp);
26+
temp = temp -> right;
27+
}
28+
29+
while(count < totalCount - 1) {
30+
BinaryTreeNode<int> *top1 = inorder.top();
31+
BinaryTreeNode<int> *top2 = revInorder.top();
32+
if(top1 -> data + top2 -> data == s) {
33+
cout << top1 -> data << " " << top2 -> data << endl;
34+
35+
BinaryTreeNode<int> *top = top1;
36+
inorder.pop();
37+
count++;
38+
if(top -> right != NULL) {
39+
top = top -> right;
40+
while(top != NULL) {
41+
inorder.push(top);
42+
top = top -> left;
43+
}
44+
}
45+
46+
top = top2;
47+
revInorder.pop();
48+
count++;
49+
if(top -> left != NULL) {
50+
top = top -> left;
51+
while(top != NULL) {
52+
revInorder.push(top);
53+
top = top -> right;
54+
}
55+
}
56+
}
57+
else if(top1 -> data + top2 -> data > s) {
58+
BinaryTreeNode<int> *top = top2;
59+
revInorder.pop();
60+
count++;
61+
if(top -> left != NULL) {
62+
top = top -> left;
63+
while(top != NULL) {
64+
revInorder.push(top);
65+
top = top -> right;
66+
}
67+
}
68+
}
69+
else {
70+
BinaryTreeNode<int> *top = top1;
71+
inorder.pop();
72+
count++;
73+
if(top -> right != NULL) {
74+
top = top -> right;
75+
while(top != NULL) {
76+
inorder.push(top);
77+
top = top -> left;
78+
}
79+
}
80+
}
81+
}
82+
}

0 commit comments

Comments
 (0)