关于二叉树四种遍历方式的核心代码
1、前序遍历
void PrintPreOrder(BinaryTreeNode* pNode)
{
if (pNode == nullptr)
return;
BinaryTreeNode* pCurrent = pNode;
std::cout << pCurrent->m_Value << " ";
if (pCurrent->p_Left != nullptr)
PrintPreOrder(pCurrent->p_Left);
if (pCurrent->p_Right)
PrintPreOrder(pCurrent->p_Right);
}
2、中序遍历
void PrintInOrder(BinaryTreeNode* pNode)
{
if (pNode == nullptr)
return;
BinaryTreeNode* pCurrent = pNode;
if (pCurrent->p_Left != nullptr)
PrintInOrder(pCurrent->p_Left);
std::cout << pCurrent->m_Value << " ";
if (pCurrent->p_Right)
PrintInOrder(pCurrent->p_Right);
}
3、后序遍历
void PrintPostOrder(BinaryTreeNode* pNode)
{
if (pNode == nullptr)
return;
BinaryTreeNode* pCurrent = pNode;
if (pCurrent->p_Left != nullptr)
PrintPostOrder(pCurrent->p_Left);
if (pCurrent->p_Right)
PrintPostOrder(pCurrent->p_Right);
std::cout << pCurrent->m_Value << " ";
}
4、层次遍历
void PrintLevelOrder(BinaryTreeNode* pRoot)
{
if (pRoot == nullptr)
return;
BinaryTreeNode* pNode = nullptr;
std::queue<BinaryTreeNode* > BinaryQueue;
BinaryQueue.push(pRoot);
int len = 1;
while (BinaryQueue.size())
{
if (len == 0)
{
len = BinaryQueue.size();
std::cout << std::endl;
}
pNode = BinaryQueue.front();
std::cout << pNode->m_Value << " ";
len--;
BinaryQueue.pop();
if (pNode->p_Left)
BinaryQueue.push(pNode->p_Left);
if (pNode->p_Right)
BinaryQueue.push(pNode->p_Right);
}
}