美文网首页
先序遍历、中序遍历、后续遍历的非递归实现

先序遍历、中序遍历、后续遍历的非递归实现

作者: Temple_Li | 来源:发表于2017-09-18 20:53 被阅读0次
void PreOrderTraverse(BiTree T)//非递归先序遍历  
{  
      
    stack<BiTree> Stack;  
    if(!T)  
    {  
        printf("空树!\n"); 
        return;  
    }  
    while(T || !Stack.empty())  
    {  
        while(T)  
        {
            Stack.push(T);
            printf("%c",T->data); 
            T=T->lchild; 
        }
        T=Stack.top(); 
        Stack.pop(); 
         T=T->rchild;  
    }                                                                                                                                     
}  
void InOrderTraverse(BiTree T)//非递归中序遍历  
{  
      
    stack<BiTree> Stack;  
    if(!T)  
    {  
        printf("空树!\n");  
        return;  
    }  
      
    while(T || !Stack.empty())  
    {  
        while(T)  
        {  
            Stack.push(T);  
            T=T->lchild;  
        }  
        T=Stack.top();  
        Stack.pop();  
        printf("%c",T->data);  
        T=T->rchild;  
    }                                                                                                                                     
} 
void PostOrderTraverse(BiTree T)//非递归后序遍历,用一个标记标记右子树是否访问过  
{  
    int flag[20];  
    stack<BiTree> Stack;  
    if(!T)  
    {  
        printf("空树!\n");  
        return;  
    }  
    while(T)  
    {  
        Stack.push(T);  
        flag[Stack.size()]=0;  
        T=T->lchild;  
    }  
    while(!Stack.empty())  
    {  
        T=Stack.top();            
        while(T->rchild && flag[Stack.size()]==0)  
        {  
            flag[Stack.size()]=1;  
            T=T->rchild;  
            while(T)  
            {  
                Stack.push(T);  
                flag[Stack.size()]=0;  
                T=T->lchild;  
            }  
        }  
        T=Stack.top();  
        printf("%c",T->data);  
        Stack.pop();  
    }                                                                                                                                     
} 

相关文章

  • 【数据结构】【C#】026-二叉树(BT):🌱遍历介绍

    一、递归遍历: 1、先序遍历:2、中序遍历:3、后续遍历:总结规律: 二、非递归遍历:利用栈来实现 非递归算法实现...

  • 二叉树的遍历算法

    递归版本 先序遍历: 中序遍历: 后序遍历: 非递归版本 先序遍历: 中序遍历: 后序遍历: 层次遍历:

  • 数据结构-树的遍历

    1. 先序遍历 递归实现 非递归实现 2. 中序遍历 递归实现 非递归实现 3. 后序遍历 递归实现 非递归实现 ...

  • 二叉树遍历

    先序遍历——[递归、非递归] 中序遍历——[递归、非递归] 后序遍历——[递归、非递归] 层次遍历——[递归、非递归]

  • 树的遍历

    节点结构: 先序遍历 递归 非递归 后序遍历 递归 非递归 中序遍历 递归 非递归 层序遍历 类库 有了上述遍历算...

  • 二叉树先序、中序、后序遍历 递归与非递归 Python实现 1.先序遍历:根节点->左子树->右子树 2.中序遍历...

  • 二叉树遍历

    请递归,非递归方式分别前序遍历,中序遍历,后续遍历二叉树

  • java二叉树三种遍历实现

    先序遍历 后续遍历 中序遍历

  • 二叉树的遍历

    非递归前序遍历 非递归中序遍历 非递归后序遍历 层序遍历

  • 手敲数据结构——二分搜索树

    使用非递归的方式进行前序遍历,借助栈的数据结构: 二分搜索树的层序遍历 问题:中序和后续遍历的非递归实现

网友评论

      本文标题:先序遍历、中序遍历、后续遍历的非递归实现

      本文链接:https://www.haomeiwen.com/subject/fymlsxtx.html