void BinarySearchTree<T>::traverseInorder(Node<T> *curNode) { if(curNode) { traverseInorder(curNode->getLeft()); std::cout << " " << curNode->getElement(); traverseInorder(curNode->getRight()); } }
// in order traversal of a tree. void traverseInorder(BTreeNode *head, vector<int> &vals) { if(NULL == head) return ; traverseInorder(head->left, vals); vals.push_back(head->val); traverseInorder(head->right, vals); }
void BinarySearchTree<T>::traverseInorder() { std::cout << "Tree Inorder traversal: "; if(!root) std::cout << "(nil)"; traverseInorder(root); std::cout << "\n"; }
//////////////////////////////////////////////////////////////// // test if a tree is BST. //////////////////////////////////////////////////////////////// // the property of a binary search tree is that its left subtree // is smaller than its root and right subtree is bigger than root. //////////////////////////////////////////////////////////////// // suppose we use the same node as the previous one. bool checkBST(BTreeNode *head) { if(NULL == head) return true; // traverse the tree inorder. vector<int> inorderVals; traverseInorder(head, inorderVals); int len = inorderVals.size(); for(int i = 0; i < len - 1; ++i) { if(inorderVals[i] > inorderVals[i+1]) return false; } return true; }