zoukankan      html  css  js  c++  java
  • 非递归前序遍历二叉树

    #include<stdio.h>
    #include<stdlib.h>
    
    //定义结构体
    typedef struct BiTNode
    {
        char data;
        struct BiTNode *lchild,*rchild;
    }BiNode,* pBiNode;
    pBiNode stack[100];
    
    void later(pBiNode * p) //前序创建树
    {    
        char ch;
        scanf("%c",&ch);
        if(ch=='#')
            *p=NULL;
        else
        {    
            printf("%c
    ",ch);
            *p=(pBiNode)malloc(sizeof(BiNode));
            if(!*p)
                exit(-1);//异常退出
            
            (*p)->data=ch;
            later(&(*p)->lchild);
            later(&(*p)->rchild);
        }
    }
    
    void print(pBiNode p) //前序遍历(输出二叉树)
    {
        int i=-1;
        while(1)
        {
            while(p!=NULL)
            {    
                stack[++i]=p->rchild;
                printf("%c",p->data);
                p=p->lchild;
            }
            if(i!=-1)        //将所有入栈的右孩子出栈
            {
                p=stack[i];
                i--;
            }
            else
                return;
            
        }
        
    }
    
    void main()
    {
        pBiNode pbiNode;
        later(&pbiNode);
        printf("非递归前序遍历输出二叉树:
    ");
        print(pbiNode);
    }

    注意:

    在将指向明确的内存空间的地址赋给指针变量前,不要对指针变量指向的内存空间的内容做任何修改,因为不确定它到底指向哪。

  • 相关阅读:
    【NOIP2017】奶酪
    【NOIP2017】时间复杂度
    【NOIP2005】过河
    【洛谷习题】垃圾陷阱
    dfs序
    bzoj2441 小W的问题
    彩色迷宫
    蛋糕与蛋挞
    树上倍增
    因数个数定理
  • 原文地址:https://www.cnblogs.com/Allen-win/p/7435018.html
Copyright © 2011-2022 走看看