数据结构之非递归遍历和层次遍历(C语言版)

调试环境:win10+vs2015

树是一种非常重要的数据结构,遍历树就变得尤为重要。
这里主要讲利用栈实现非递归遍历二叉树和利用队列实现层次遍历二叉树。

非递归遍历
首先需要编写一个树的结构体和相关函数

//声明一个树的结构体
typedef struct Tree {
    char data;           //存放的数据
    struct Tree* left;   //指向左孩子
    struct Tree* right;  //指向右孩子
}Tree,*pTree;
//初始化化二叉链表
pTree Init() {
    pTree ptree = (pTree)malloc(sizeof(Tree));  //申请节点
    ptree->data = 0;                            //赋初值
    ptree->left = NULL;
    ptree->right = NULL;
    return ptree;                               //赋值
}
//先序遍历创建二叉链表
void Creat(pTree* ptree) {                      //传入一个树节点的指针
    char c;
    c = getchar();                              //获取控制台的一个字符
    if (c == '.')*ptree = NULL;                 //如果为“.”,就把该子树赋空
    else {
        *ptree = (pTree)malloc(sizeof(Tree));   //否则,申请节点
        (*ptree)->data = c;                     //赋值
        Creat(&((*ptree)->left));               //递归调用,创建左子树
        Creat(&((*ptree)->right));              //递归调用,创建右子树
    }
}

其次声明一个栈

//定义一个栈节点的结构体
typedef struct Stack {
    pTree ptree;          //存放子树
    struc
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值