6、利用递归函数返回一棵二叉树的高度:
14.用递归方式,在二叉搜索树中查找key值
bool search( BinaryTree<T>* root, T k) {
if( root == NULL)
return false;
if (root->value == k)
return true;
return search( root->lChild) || search( root -> rChild);
}
16.打印出BST中介于min和max间的所以节点值
分析:属于查找问题,三种遍历方式。由于需要按照顺序打印出介于两个值之间的结点,所以中序遍历保证顺序,选用中序。
// 这里的小于号,大于号,等于号应当是重载过的,可以直接比大小,以下直接使用。
Void printRange(BST<T>* root, min, max) {
stack<BST<T> > myStack;
BST<T>* pointer = root;
while( !myStack.empty() ) {
if(pointer->value < min)
pointer = pointer -> rChild;
if(pointer-> value > max) {
pointer = pointer -> lChild;
}
if( min < pointer->value && pointer->value < max) {
myStack.push(pointer);
pointer = pointer -> lChild;
}
if( min = pointer -> value) {
cout << pointer -> value;
pointer = pointer -> rChild;
}
if ( max = pointer -> value ) {
myStack.push(pointer); // 这里注意,出栈时,不用向右搜索了,因此,下面出栈时,还需检查 pointer -> value 是否等于 max。一切为了少访问结点。
pointer = pointer -> lChild;
}
if ( pointer == NULL ) {
pointer = myStack.top();
myStack.pop();
cout << pointer -> value;
if( pointer -> value != max)
pointer = pointer -> rChild;
else break; // 如果查到 value == max, 就是该结束的时候了。
}
}
}