zoukankan      html  css  js  c++  java
  • 非递归实现中序,先序,后序遍历二叉树部分代码

    /*层次遍历,其实就是一个队列,先把根节点压入,之后进入循环,每次先弹出一个根节点,在输出值后,将其左右子树分别压入队列*/
    void InorderTraversal(BinTree BT) {
        BinTree T;
        Stack S = CreateStack(100);//创建并初始化堆栈
    
        while (T || !IsEmpty(S)) {
            while (T) {//一直向左并将沿途结点压入堆栈
                Push(S, T);
                T = T->Left;
            }
    
            if (!IsEmpty(S)) {
                T = Pop(S);
                printf(" %c", T->Data);
                T = T->Right;
            }
        }
    
    }
    
    void PreorderTraversal(BinTree BT) {
        BinTree T;
        Stack S = CreateStack(100);//创建并初始化堆栈
    
        while (T || !IsEmpty(S)) {
            while (T) {//一直向左并将沿途结点压入堆栈
                printf(" %c", T->Data);
                Push(S, T);
                T = T->Left;
            }
    
            if (!IsEmpty(S)) {
                T = Pop(S);
                T = T->Right;
            }
        }
    }
    //这个其实举一个例子,就很清楚过程了
    //因为堆栈后进先出,那根节点先压入,再右子树压入,最后左子树即可
    //这样输出顺序就是 左 右 根
    void PostorderTraversal(BinTree BT) { BinTree T; Stack S = CreateStack(100); Stack Q = CreateStack(100);//后序遍历 路径存储 while (T || !IsEmpty(S)) { while (T) { Push(S, T); Push(Q, T); T = T->Right; } if (!IsEmpty(S)) { T = Pop(S); T = T->Left; } } while (!IsEmpty(Q)) {//输出的就是后序遍历结果 T = Pop(Q); printf(" %c", T->Data); } }
  • 相关阅读:
    Systemd 指令
    2018年书单
    2017年书单
    Centos7 Devstack [Rocky] 重启后无法联网
    kvm虚拟机操作相关命令及虚拟机和镜像密码修改
    负载均衡原理-转
    用配置文件里面的参数值替换yaml模板中的变量值【python】
    linux工具之sar
    利用系统缓存优化程序的运行效率
    Elasticsearch单机部署
  • 原文地址:https://www.cnblogs.com/letianpaiai/p/12848432.html
Copyright © 2011-2022 走看看