//中序遍历
template<class T>
void BinaryTree<T>::InOrder(TreeNode<T> *currentNode)
{
if(currentNode)
{
InOrder(currentNode->leftChild);
Visit(currentNode);
InOrder(currentNode->rightChild);
}
}
//前序遍历
template<class T>
void BinaryTree<T>::PreOrder(TreeNode<T> *currentNode)
{
if(currentNode)
{
Visit(currentNode);
PreOrder(currentNode->leftChild);
PreOrder(currentNode->rightChild);
}
}
//后续遍历
template<class T>
void BinaryTree<T>::PostOrder(TreeNode<T> *currentNode)
{
if(currentNode)
{
PostOrder(currentNode->leftChild);
PostOrder(currentNode->rightChild);
Visit(currentNode);
}
}
//层序遍历
template<class T>
void BinaryTree<T>::LevalOrder()//层序遍历 显示一个之前先把其左右孩子放到队列里
{
std::queue<TreeNode<T>*> q; //创建队列 队列中放的是树节点的指针
TreeNode<T>* currentNode=root;
while(currentNode)
{
Visit(currentNode);
if(currentNode->leftChild) q.push(currentNode->leftChild); //入队列
if(currentNode->rightChild) q.push(currentNode->rightChild);//入队列
if(q.empty()) return;
currentNode=q.front();//将队列头记下,将左右孩子入队列
q.pop();//出队头
}
}