二叉树遍历

//第一步:头文件
//第二步:宏定义,结构体定义,重命名
//第三步:情况 1:声明小函数,函数的具体实现放在 main 函数之后
//情况 2:定义并实现小函数的具体代码,所有的函数实现都在 main 函数之前
//第四步:实现 main 函数
#include<stdio.h>
#include<stdlib.h>
typedef char ElementType;
typedef struct TNode * Position;
typedef Position BinTree; /* 二叉树类型 */
struct TNode{ /* 树结点定义 */
ElementType Data; /* 结点数据 */
struct TNode * Left; /* 指向左子树 */
BinTree Right; /* 指向右子树 */
};

/* 中序遍历 */
void MiddleTraversal( BinTree BT )
{
if( BT ) {
MiddleTraversal( BT->Left );
/* 此处假设对 BT 结点的访问就是打印数据 */
printf("%c ", BT->Data); /* 假设数据为整型 */
MiddleTraversal( BT->Right );
} 
}

/* 先序遍历 */
void PreviousTraversal( BinTree BT )
{
if( BT ) {
printf("%c ", BT->Data );
PreviousTraversal( BT->Left );
PreviousTraversal( BT->Right );
} 
}

/* 后序遍历 */
void BehindTraversal( BinTree BT )
{
if( BT ) {
BehindTraversal( BT->Left );
BehindTraversal( BT->Right );
printf("%c ", BT->Data);
} 
}

BinTree CreateBTree() {
	//自己构建二叉树
	//1:用 malloc 分配空间大小
	    BinTree PA = (struct TNode*)malloc(sizeof(struct TNode));
		BinTree PB = (Position)malloc(sizeof(struct TNode));
		BinTree PC = (BinTree)malloc(sizeof(struct TNode));
		BinTree PD = (struct TNode*)malloc(sizeof(struct TNode));
		BinTree PE = (Position)malloc(sizeof(struct TNode));
		BinTree PF = (BinTree)malloc(sizeof(struct TNode));
		//2:每个结点数据域赋值
		PA->Data = 'A';
		PB->Data = 'B';
		PC->Data = 'C';
		PD->Data = 'D';
		PE->Data = 'E';
		PF->Data = 'F';
		//3:每个结点指针域赋值
		PA->Left = PB;
		PA->Right = PC;
		PB->Left = PD;
		PB->Right = NULL;
		PC->Left = PE;
		PC->Right = PF;
		PD->Left = PD->Right = NULL;
		PE->Left = PE->Right = NULL;
		PF->Left = PF->Right = NULL;
		//4:返回根节点
		return PA;
}

int main(){
BinTree pT=CreateBTree();
printf("前序遍历:");
PreviousTraversal(pT); 
printf("\n");
printf("中序遍历:"); 
MiddleTraversal(pT);
printf("\n");
printf("后序遍历:"); 
BehindTraversal(pT);
printf("\n");
return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值