BST Normal Inorder and Reverse Inorder. node, node. node, node. . , true. , node , node . - , false.
boolean isPairPresent(Node3 root, int sum)
{
Stack<Node3> stack1 = new Stack<Node3>();
Stack<Node3> stack2 = new Stack<Node3>();
boolean done1 = false;
boolean done2 = false;
int val1 = 0, val2 = 0;
Node3 curr1 = root, curr2 = root;
while(true) {
while(done1 == false) {
if(curr1 != null) {
stack1.push(curr1);
curr1 = curr1.left;
} else {
if(stack1.isEmpty())
done1 = true;
else {
curr1 = stack1.pop();
val1 = curr1.data;
curr1 = curr1.right;
done1 = true;
}
}
}
while(done2 == false) {
if(curr2 != null) {
stack2.push(curr2);
curr2 = curr2.right;
} else {
if(stack2.isEmpty())
done2 = true;
else {
curr2 = stack2.pop();
val2 = curr2.data;
curr2 = curr2.left;
done2 = true;
}
}
}
if((val1 != val2) && (val1+val2 == sum)) {
System.out.println("Pair found: "+val1+" + "+val2+" = "+sum);
return true;
} else if(val1 + val2 > sum) {
done2 = false;
} else if(val1 + val2 < sum)
done1 = false;
if(val1 >= val2)
return false;
}
}