树及实现(下)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

关于二叉树的遍历的代码实现

一、二叉树的三种遍历实现

代码如下(示例):

tree.h
typedef char date_t;

typedef struct node_t
{
	date_t date;
	struct node_t *left;
	struct node_t *right;
	
}bitree;

bitree *tree_create();
void preorder(bitree*r);
void inorder(bitree *r);
void postorder(bitree *r);

tree.c
#include<stdio.h>
#include<stdlib.h>
#include"tree.h"

bitree *tree_create(){
	date_t ch;
	bitree *r;
	scanf("%c",&ch);
	if(ch=='#')
		return NULL;
	if((r=(bitree*)malloc(sizeof(bitree)))==NULL)
	{
	printf("malloc is failed\n");
	return NULL;
	}
	r->date=ch;//先根节点
	r->left=tree_create();
	r->right=tree_create();
	return r;//函数递归使用

}
//先序//
void preorder(bitree *r){
	if(r==NULL)
	{
	return;
	}
	else
	{
	printf("%c",r->date);
	preorder(r->left);
	preorder(r->right);
	}

}
//中序//
void inorder(bitree *r){

		if(r==NULL)
	{
	return;
	}
	else
	{
	inorder(r->left);
	printf("%c",r->date);
	inorder(r->right);
	}

}
//后序//
void postorder(bitree *r){

		if(r==NULL)
	{
	return;
	}
	else
	{
	postorder(r->left);
	postorder(r->right);
	printf("%c",r->date);

	}

}
test.c
#include <stdio.h>
#include"tree.h"
int main(int argc, char *argv[])
{
	bitree *r;
	if((r=tree_create())==NULL)
		return -1;
	preorder(r);
	puts("");//加入换行符
	inorder(r);
	puts("");
	postorder(r);
	puts("");
	return 0;
}

在这里插入图片描述

编译运行结果

在这里插入图片描述


二、二叉树的层次遍历实现

按照层次对二叉树进行遍历:
访问:ABECFDGHK
访问节点入队
出队 1.访问左子树,入队。 2.访问右子树,入队。(循环处理)
队列中存的是树形结构节点。

void layerorder(bitree *r){
linkqueue *lq;
if((lq=queue_create())==NULL)
{
return;
}
if(r==NULL)
	return;
	printf("%c",r->date);
	enqueue(lq,r);
	while(!queue_empty(lq)){
	r=dequeue(lq);
	if(r->left!=NULL){
		printf("%c",r->left->date);
		enqueue(lq,r->left);
	}
	if(r->right){

		printf("%c",r->right->date);
		enqueue(lq,r->right);
	}
}
}
编译运行结果

在这里插入图片描述


三、总结

本文主要阐述了四种不同的二叉树遍历方法,通过代码具体实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值