#include <iostream>
#include <iomanip>
using namespace std;
struct ty_tree {
ty_tree *left,*right;
int value;
};
bool foobar (ty_tree *tree, int value, int & count) {
if (tree !=nullptr) { // nullptr!!!
if (tree->value != value) {
count++;
if (foobar (tree->left, value, count) ||
foobar (tree->right, value, count) ) // if found below
cout << tree->value<<endl; // print the node, becaus it's on the path
}
else {
cout << "Found: "<< tree->value<<endl; // print the value found
return true; // and inform caller that he can print as well.
}
}
else return false; // reached a leaf without finding
}
void print(ty_tree* t, int level=0) {
if (t) {
cout << setw(level*2)<<" "<<t->value<<endl;
print (t->left, level+1);
print (t->right,level+1);
}
else cout << setw(level*2)<<" "<<"X"<<endl;
}
int main() {
//quik & dirty init to reproduce case
ty_tree node[7];
for (int i=0; i<7; i++) {
node[i].value =i*10;
node[i].left=node[i].right=nullptr;
}
node[1].right = &node[6];
node[1].left = &node[2];
node[2].right= &node[3];
node[2].left = &node[5];
node[3].right = &node[4];
// check test case
cout << "Test tree:"<<endl;
print (&node[1]);
cout <<endl;
// test
cout << "Search 40"<<endl;
int count=0;
if (!foobar(&node[1], 40, count))
cout << "not found" <<endl;
cout << "Nodes traversed: " <<count<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCB0eV90cmVlIHsKCXR5X3RyZWUgKmxlZnQsKnJpZ2h0OyAKCWludCB2YWx1ZTsgCn07Cgpib29sIGZvb2JhciAodHlfdHJlZSAqdHJlZSwgaW50IHZhbHVlLCBpbnQgJiBjb3VudCkgewogICAgaWYgKHRyZWUgIT1udWxscHRyKSB7IC8vIG51bGxwdHIhISEKICAgICAgICBpZiAodHJlZS0+dmFsdWUgIT0gdmFsdWUpIHsKICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgaWYgKGZvb2JhciAodHJlZS0+bGVmdCwgdmFsdWUsIGNvdW50KSB8fAogICAgICAgICAgICAgICAgICBmb29iYXIgKHRyZWUtPnJpZ2h0LCB2YWx1ZSwgY291bnQpICkgLy8gaWYgZm91bmQgYmVsb3cKICAgICAgICAgICAgY291dCA8PCB0cmVlLT52YWx1ZTw8ZW5kbDsgIC8vIHByaW50IHRoZSBub2RlLCBiZWNhdXMgaXQncyBvbiB0aGUgcGF0aCAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGNvdXQgPDwgIkZvdW5kOiAiPDwgdHJlZS0+dmFsdWU8PGVuZGw7ICAvLyBwcmludCB0aGUgdmFsdWUgZm91bmQKICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAgICAvLyBhbmQgaW5mb3JtIGNhbGxlciB0aGF0IGhlIGNhbiBwcmludCBhcyB3ZWxsLgogICAgICAgIH0KICAgIH0gCiAgICBlbHNlIHJldHVybiBmYWxzZTsgIC8vIHJlYWNoZWQgYSBsZWFmIHdpdGhvdXQgZmluZGluZwp9IAoKdm9pZCBwcmludCh0eV90cmVlKiB0LCBpbnQgbGV2ZWw9MCkgewogICBpZiAodCkgewogICAJICAgY291dCA8PCBzZXR3KGxldmVsKjIpPDwiICI8PHQtPnZhbHVlPDxlbmRsOwogICAJICAgcHJpbnQgKHQtPmxlZnQsIGxldmVsKzEpOwogICAJICAgcHJpbnQgKHQtPnJpZ2h0LGxldmVsKzEpOyAKICAgfQogICBlbHNlIGNvdXQgPDwgc2V0dyhsZXZlbCoyKTw8IiAiPDwiWCI8PGVuZGw7Cn0KCmludCBtYWluKCkgewoJLy9xdWlrICYgZGlydHkgaW5pdCB0byByZXByb2R1Y2UgY2FzZQoJdHlfdHJlZSBub2RlWzddOwoJZm9yIChpbnQgaT0wOyBpPDc7IGkrKykgeyAKCQlub2RlW2ldLnZhbHVlID1pKjEwOyAKCQlub2RlW2ldLmxlZnQ9bm9kZVtpXS5yaWdodD1udWxscHRyOwoJfQoJbm9kZVsxXS5yaWdodCA9ICZub2RlWzZdOyAKCW5vZGVbMV0ubGVmdCA9ICZub2RlWzJdOwoJbm9kZVsyXS5yaWdodD0gJm5vZGVbM107Cglub2RlWzJdLmxlZnQgPSAgJm5vZGVbNV07Cglub2RlWzNdLnJpZ2h0ID0gJm5vZGVbNF07CgkKCS8vIGNoZWNrIHRlc3QgY2FzZQoJY291dCA8PCAiVGVzdCB0cmVlOiI8PGVuZGw7IAoJcHJpbnQgKCZub2RlWzFdKTsKCWNvdXQgPDxlbmRsOyAKCQoJLy8gdGVzdCAKCWNvdXQgPDwgIlNlYXJjaCA0MCI8PGVuZGw7IAoJaW50IGNvdW50PTA7IAoJaWYgKCFmb29iYXIoJm5vZGVbMV0sIDQwLCBjb3VudCkpIAoJICAgY291dCA8PCAibm90IGZvdW5kIiA8PGVuZGw7IAogICAgY291dCA8PCAiTm9kZXMgdHJhdmVyc2VkOiAiIDw8Y291bnQ8PGVuZGw7IAogICAKCXJldHVybiAwOwp9