对于二分搜索树来说,中序遍历输出的顺序是从小到大的
特点:遍历完左右节点后才遍历自身,可以应用到释放二叉搜索树的内存上
实现
//定义一棵二分搜索树
class BST{
private:
//树的一个节点定义
struct Node{
Key key;
Value value;
Node* left;//左孩子
Node* right;//右孩子
Node(Key key, Value value) //构造函数
{
this->key=key;
this->value=value;
this->right=this->left=NULL;
}
Node(Node* node) //构造函数
{
this->key=node->key;
this->value=node->value;
this->right=node->right;
this->left=node->left;
}
};
Node* root;//树的根节点
int count;//树的节点数
public:
BST()
{
count=0;
root=NULL;
}
int size()
{
return count;
}
bool isEmpty()
{
return count==0;
}
//前序遍历 自己/左/右
void preOrder()
{
preOrder(root);
}
//中序遍历 左/自己/右
void inOrder()
{
inOrder(root);
}
//后序遍历 左/右/自己
void postOrder()
{
postOrder(root);
}
private:
//前序遍历
void preOrder(Node* node)
{
if(node!=NULL)
{
cout<<node->key<<endl;
preOrder(node->left);
preOrder(node->right);
}
}
//中序遍历
void inOrder(Node* node)
{
if(node!=NULL)
{
inOrder(node->left);
cout<<node->key<<endl;
inOrder(node->right);
}
}
//后序遍历
void postOrder(Node* node)
{
if(node!=NULL)
{
postOrder(node->left);
postOrder(node->right);
cout<<node->key<<endl;
}
}
};