• 树的遍历算法-只有一个变量T-递归和非递归


    void PostOrderTraverse(BTNode *T)
    {   //就用到了一个变量T
        if(T==NULL)
            return;
         PostOrderTraverse(T->lchild);
         PostOrderTraverse(T->rchild);
         printf("%c",T->data);
    }

     

    前序非递归测试代码

    #include <stdio.h>
    #include <malloc.h>
    #define ElemType char
    
    //顺序栈结构的定义 typedef struct { ElemType St[MaxSize]; int top; }SqStack;

    int MaxSize=20;

     
    //二叉树结点的定义 typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;

    //先序建立二叉树,大话p187,教科书吧版 BiTree CreateBiTree() { char ch; BiTree T; scanf("%c",&ch); if(ch=='#') T=NULL; else { T = (BiTree)malloc(sizeof(BiTNode)); T->data = ch; T->lchild = CreateBiTree(); T->rchild = CreateBiTree(); } return T;//返回根节点 } //非递归遍历算法
    //简答:指向根结点指针进站,@访问该结点并且退站,退出结点的右左分别进站
    //@这句话一直执行-直到栈为空即是top==-1
    //主要用到工作指针变量p和top变量来操纵数据结构
    void PreOrder(BiTree T) { BiTree p,St[20]; // St[MaxSize]里面数据元素的类型和T是一样,都是一样 int top=-1; if(T==NULL) return; top++ ; St[top]=T; //根结点进站,指向根结点的指针进站 while(top>-1) //while这个循环是主要的 { p=St[top];top--;printf("%c",p->data); //栈顶的那个退掉,退站并访问该根结点
       

        if(p->rchild!=NULL)   //右孩子进站 { top++; St[top]=p->rchild; } if(p->lchild!=NULL) //左孩子结点进站 { top++; St[top]=p->lchild; } } } //原理,根结点进站;只要z站不是空的?{退站并访问该结点,然后右左孩子进站(然后去判断那个条件满足吗?)} int main() { BiTree T; T = CreateBiTree();//建立 printf("先序遍历二叉树: "); PreOrder(T);//输出 printf(" "); return 0; }

     

  • 相关阅读:
    Spring.profile配合Jenkins发布War包,实现开发、测试和生产环境的按需切换
    Ubuntu 配置 Tomcat
    Proper usage of Java -D command-line parameters
    Linux下设置MySql自动启动
    cent6.x配置主机名及静态网络
    vmware can not be closed virtual machine is busy
    VMware虚拟机下扩容磁盘(centos7)
    Spring、MyBatis、Shiro、Quartz、Activiti框架
    Jenkins ChangeLog
    JEECG DataGridColumn dictionary使用问题
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/7050692.html
Copyright © 2020-2023  润新知