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
Post a Comment