【囤】二叉树的四种遍历方式

//中序遍历
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();//出队头
    }

}

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务