zoukankan      html  css  js  c++  java
  • 树的遍历算法-只有一个变量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]AOP(切面)编程
    [spring]基于注解的spring配置
    [redis]redis五种数据类型和应用场景
    [redis]redis实现分页的方法
    [zookeeper]ZooInspector的使用
    [log4j]SLF4J+log4j的使用
    [zookeeper]依赖jar的问题
    导出word功能,用html代码在word中插入分页符
    jq实现千分位的转换
    oracle 创建表空间及oracle 11g表空间之最大最小
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/7050692.html
Copyright © 2011-2022 走看看