There is a kind of binary search tree with nodes of the form:
struct node { struct node *left; struct node *right; int value; }; check it for correctness, i.e. whether all elements from the left subtrees are smaller than the current node, and from the right one - more.
I wrote the following functions (only the walk is called in main ):
bool proverka_l (struct node *nNode, int be) { bool rez = true; if (nNode->value >= be) return false; if (nNode->left) rez = proverka_l (nNode->left, be); if (rez && nNode->right) rez = proverka_l (nNode->right, be); return rez; } bool proverka_r (struct node *nNode, int be) { bool rez = true; if (nNode->value <= be) return false; if (nNode->left) rez = proverka_r (nNode->left, be); if (rez && nNode->right) rez = proverka_r (nNode->right, be); return rez; } bool walk (struct node *nNode) { bool rez = true; if (nNode->left) rez = proverka_l (nNode->left, nNode->value); if (rez && nNode->right) rez = proverka_r (nNode->right, nNode->value); if (rez && nNode->left) rez = walk (nNode->left); if (rez && nNode->right) rez = walk (nNode->right); return rez; } But if the tree is degenerate (for each node there is only one descendant), then the time costs are too large. How to speed up the check?
proverka_and onwalk. Why did it take? Everything can be done in one pass through the tree. - AnT