非递归前序遍历二叉树

Posted Allen101

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非递归前序遍历二叉树相关的知识,希望对你有一定的参考价值。

 

 

#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\n",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("非递归前序遍历输出二叉树:\n");
    print(pbiNode);
}

注意:

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

 

以上是关于非递归前序遍历二叉树的主要内容,如果未能解决你的问题,请参考以下文章

二叉树经典题之二叉树的非递归遍历

二叉树前序后序和后序遍历(非递归实现)

二叉树的前序中序后序遍历-非递归-使用同一段代码实现

详解二叉树的遍历问题(前序后序中序层序遍历的递归算法及非递归算法及其详细图示)

经典面试题二二叉树的递归与非递归遍历(前序中序后序)

144_二叉树的前序遍历