• 二叉树的创建及遍历_递归遍历_非递归遍历


    缺少非递归后续遍历

    #include <iostream>
    #include <cstdio>
    #include <malloc.h>
    #include <stack>
    
    using namespace std;
    
    typedef struct tree{
        char a;
        tree *lchild;
        tree *rchild;
    };
    
    tree* create(tree *T){
    
        char c=getchar();
        if(c=='#'){
            T=NULL;
        }else{
    
            T=(tree*)malloc(sizeof(tree));
            T->a=c;
            if(!T){
                printf("Error!n");
            }
            T->lchild=create(T->lchild);
            T->rchild=create(T->rchild);
        }
        return T;
    
    }
    
    void preorder(tree *T){
        if(T){
            printf("%c",T->a);
            preorder(T->lchild);
            preorder(T->rchild);
        }
    }
    
    void inorder(tree *T){
        if(T){
            inorder(T->lchild);
            printf("%c",T->a);
            inorder(T->rchild);
        }
    }
    
    void postorder(tree *T){
        if(T){
            postorder(T->lchild);
            postorder(T->rchild);
            printf("%c",T->a);
        }
    }
    
    //非递归先序遍历
    void preorder1(tree *T){
        tree *p=T;
        stack<tree *> s;
        while(p!=NULL||!s.empty()){
            while(p!=NULL){
                printf("%c",p->a);
                s.push(p);
                p=p->lchild;
            }
            if(!s.empty()){
                p=s.top();
                s.pop();
                p=p->rchild;
            }
        }
    }
    
    
    //非递归中序遍历
    void inorder1(tree *T){
        tree *p=T;
        stack<tree *> s;
        while(p!=NULL||!s.empty()){
            while(p!=NULL){
                s.push(p);
                p=p->lchild;
            }
            if(!s.empty()){
                p=s.top();
                printf("%c",p->a);
                s.pop();
                p=p->rchild;
            }
        }
    }
    
    //非递归后序遍历
    
    
    
    int main()
    {
        tree *T;
        printf("Plese input the tree's sequence:
    ");
        T=create(T);
        printf("preorder:    ");
        preorder(T);
        printf("
    ");
    
        printf("inorder:     ");
        inorder(T);
        printf("
    ");
    
        printf("postorder:   ");
        postorder(T);
        printf("
    ");
    
    
        printf("preorder(no_recersive):    ");
        preorder1(T);
        printf("
    
    ");
    
        printf("inorder(no_recersive):     ");
        inorder1(T);
        printf("
    
    ");
    
        return 0;
    }
  • 相关阅读:
    DirectX9:基础篇 第六章 颜色
    DirectX9:应用篇 论OBJ模型文件格式
    MFC:绘图基础
    DirectX9:基础篇 纹理
    DirectX9:应用篇 论OBJ模型文件和.X模型文件互转
    MFC:控件位置调整
    数据结构:二叉树
    DirectX9:总结篇 数据类型结构
    C89:论结构体/枚举体/联合体的使用
    css布局汇总
  • 原文地址:https://www.cnblogs.com/TWS-YIFEI/p/5794806.html
Copyright © 2020-2023  润新知