美文网首页
二叉树的前序,中序,后序遍历

二叉树的前序,中序,后序遍历

作者: 刀拉 | 来源:发表于2019-05-26 15:50 被阅读0次

    前序遍历:根左右
    中序遍历:左根右
    后序遍历:左右根

    前序遍历

    typedef struct node{
    
        char data;
        struct node *lchild,*rchild;
    
    }BiTNode; 
    //前序遍历 递归 
    void PreOrder(BiTNode *p){
    
        if(p!=NULL){
            printf("%3c",p->data );
            PreOrder(p->lchild);
            PreOrder(p->rchild);
            
        } 
    }
    
    //非递归
    void Preorder1(BiTNode *p){
        BiTNode *stack[MAXSIZE];
        int i=0;
        stack[0]=NULL;
        while(p!=NULL||i>0){
            if(p!=NULL){
                printf("%3c",p->data);
                stack[++i]=p;
                p=p->lchild;
                
            }
            else{
                p=stack[i--];
                p=p->rchild;
            }
        } 
    }
    

    中序遍历

    //中序遍历 递归 
    void InOrder(BiTNode *p){
        if(p!=NULL){
            InOrder(p->lchild);
            printf("%3c",p->data);
            InOrder(p->rchild);
        }
    }
    //非递归 
    void Inorder1(BiTNode *p){
        BiTNode *stack[MAXSIZE];
        int i=0;
        stack[0]=NULL;
        while(i>=0){
            if(p!=NULL){
                stack[++i]=p;
                p=p->lchild;
            }
            else{
                p=stack[i--];
                printf("%3c",p->data);
                p=p->rchild;
            }
            if(p==NULL&&i==0)
                break;
        }
    }
    

    后序遍历

    //后序遍历 递归 
    void PostOrder(BiTNode *p){
        if(p!=NULL){
            PostOrder(p->lchild);
            PostOrder(p->rchild);
            printf("%3c",p->data);
        }
    }
    //非递归 
    void Postorder1(BiTNode *p){
        BiTNode *stack[MAXSIZE];
        int b[MAXSIZE],i=0;
        stack[0]=NULL;
        do{
            if(p!=NULL){
                stack[++i]=p;
                b[i]=0;
                p=p->lchild;
            }
            else{
                p=stack[i--];
                if(b[i+1]==0){
                    stack[++i]=p;
                    b[i]=1;
                    p=p->rchild;
                }
                else{
                    printf("%3c",p->data);
                    p=NULL;
                }
            }
            
        }while(p!=NULL||i>0);
    }
    

    相关文章

      网友评论

          本文标题:二叉树的前序,中序,后序遍历

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