最近在学习数据结构,在这写一下二叉树的前序、后序和中序的递归遍历和非递归遍历算法和实现。
1、二叉树的前序遍历:
1)递归遍历算法和实现:根节点>>左孩子>>右孩子
void preOrder(MyStruct *proot)
{
if (proot != nullptr)
{
cout << proot->Nodedata << " ";
preOrder(proot->pLeft);
preOrder(proot->pRight);
}
}
2)非递归遍历算法和实现:先判断传入节点是否为空,为空则什么都不用做。然后从根节点一直向左孩子访问,并把访问过的节点全部压入stack中,一直到当前的节点的左孩子为空。将栈中第一个节点弹出并指向当前结点(pcurr=pcurr->pright)的右孩子,如果pcurr不为空则访问该节点,并判断pcurr->pleft是否为空,不为空则继续访问左孩子,为空则继续弹出栈中元素,继续以上步骤直到栈为空。
void PreOrder(MyStruct *proot)
{
MyStruct *pcurr = proot;
stack<MyStruct*> mystack1;
if (pcurr == NULL)
{
return;
}
while (!mystack1.empty() || pcurr != NULL)
{
while (pcurr != nullptr)
{
cout << pcurr->Nodedata << " "