<数据结构>二叉树的递归、非递归以及层次遍历算法C语言实现

         二叉树是数据结构中一种非常重要的结构,熟练的掌握二叉树的创建,遍历是打好编程基础的关键。对于遍历,不能仅仅只掌握递归遍历,还应掌握效率更高地非递归遍历。对于非递归的先序、中序、后序遍历要用到栈(在之前的博文中已经提到了具体的实现过程),而在层次遍历中要使用到另一种数据结构——队列,这个在之前博文中没有提到,因此在本篇博文中将会给出简单实现。

         在本篇博文中给出的代码实现了:二叉树的创建、二叉树的递归、非递归的先、中、后序以及层次遍历七种遍历算法。话不多说,下面给出代码(仅供参考):

         因为要用到栈和队列,因此在这代码一并给出,方便大家运行。

“LinkStack.h”:

#ifndef _LINKSTACK_H
#define _LINKSTACK_H

#include<stdlib.h>
#include<stdio.h>
#include"BiTree.h"

//定义栈中数据的类型
typedef BiTree LStackElem;

//定义栈元素的结构
typedef struct SNode
{
	LStackElem data;
	struct SNode * next;
}SNode, *LinkNode;

//定义栈的结构
typedef struct 
{
	LinkNode node;  //栈顶指针(相当于链表中的头指针)
	int size;				//栈的大小
}LinkStack;

//初始化栈
void init_link_stack(LinkStack &S);

//进栈
void push(LinkStack &S, LStackElem e);

//出栈
void pop(LinkStack &S, LStackElem &e);

//判断栈是否为空
int is_stack_empty(LinkStack S);

//获得栈顶元素
void get_top(LinkStack S, LStackElem &e);

#endif



"LinkQueue.h":

#ifndef _LINKQUEUE_H
#define _LINKQUEUE_H
#include"BiTree.h"

typedef BiTree QueueElem;

typedef struct QNode
{
	QueueElem data;
	struct QNode * next;
}QNode;

typedef struct 
{
	QNode * top;          //队列头指针
	QNode * bottom;   //队列尾指针
	int size;                  //队列大小
}LinkQueue;


//初始化队列
void init_link_queue(LinkQueue &Q);

//入队列
void in_link_queue(LinkQueue &Q, QueueElem e);

//出队列
void out_link_queue(LinkQueue &Q, QueueElem &e);

//队列是否为空
int is_queue_empty(LinkQ
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值