c++ - Function does not end after return placed in condition -


here node definition:

node::node(int value, node* left, node* right) {    this->value = value;    this->left = left;    this->right = right; }  int node::getvalue() const {    return value; }  node* node::getleft() const {    return left; }  node* node::getright() const {    return right; } 

and here function contains:

static bool contains(const node& root, int value) {    cout << "root value: " << root.getvalue() << endl;    if(root.getvalue() == value)    {       cout << "you entered." << endl;       return true;    }    else if(root.getleft() != null)    {       cout << "left tree: " << endl;       contains(*(root.getleft()), value);    }    else if(root.getright() != null)    {       cout << "right tree: " << endl;       contains(*(root.getright()), value);    }     cout << "end" << endl;    return false; } 

now use function:

node n1(1, null, null); node n3(3, null, null); node n2(2, &n1, &n3);  cout << "contains? " << contains(n2, 1) << endl; 

this 1 value in left subtree. displays "you entered." , anyway goes end of function displaying 0 result. why doesn't display 1(true)? did miss?

you missing return statements.

cout << "root value: " << root.getvalue() << endl;  if(root.getvalue() == value) {     cout << "you entered." << endl;     return true; } else if(root.getleft() != null) {     cout << "left tree: " << endl;     contains(*(root.getleft()), value); // no return here  } else if(root.getright() != null) {     cout << "right tree: " << endl;     contains(*(root.getright()), value); // , no return here }  cout << "end" << endl; return false; 

it checks whether tree contains value somewhere nether carries result outside world. change to

if (root.getvalue() == value) {     cout << "you entered." << endl;     return true; } auto left = root.getleft(); if (left) {    cout << "checking left tree: " << endl;    if (contains(*left, value))         return true; } auto right = root.getright(); if (right) {    cout << "checking right tree: " << endl;    if (contains(*right, value))         return true; }  cout << "end" << endl; return false; 

and should work.


Comments

Popular posts from this blog

python - Operations inside variables -

Generic Map Parameter java -

arrays - What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? -