二叉树的递归遍历


你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~


🍊自我介绍

  Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的内容。


🍊二叉树遍历思路

遍历算法:
前序遍历:若二叉树为空树,则执行空操作;否则先访问根节点,再遍历左子树,最后再遍历右子树。
中序遍历:若二叉树为空树,则执行空操作;否则先访问左子树,再遍历根节点,最后再遍历右子树。
后序遍历:若二叉树为空树,则执行空操作;否则先访问左子树,再遍历右子树,最后再遍历根节点。

🍊代码实现

此次二叉树遍历的代码针对所有的二叉树,并非只适用于完全二叉树!

bitree.c

#include "bitree.h" 

bitree_t *create_binatry_tree(int n)
{
	bitree_t *root = NULL;

	root = (bitree_t *)malloc(sizeof(bitree_t));
	memset(root,0,sizeof(bitree_t));

	root->n = n;
	root->lchild = root->rchild = NULL;


	printf("Input %d node data : ",n);
	scanf("%c",&(root->data));

	//清除缓冲区数据
	while(getchar() != '\n');
	
	//左孩子存在条件
	if(2 * n <= N)
	{
		root->lchild = create_binatry_tree(2 * n);	
	}

	//左孩子存在条件
	if(2 * n  + 1 <= N)
	{
		root->rchild = create_binatry_tree(2 * n + 1);	
	}

	return root;
}

//前序遍历
void pre_order(bitree_t *root)
{
	if(NULL == root)
		return ;

	printf("(%d : %c) ",root->n,root->data); //根
	pre_order(root->lchild); //左
	pre_order(root->rchild); //右
}

//中序遍历
void in_order(bitree_t *root)
{
	if(NULL == root)
		return ;

	in_order(root->lchild); //左
	printf("(%d : %c) ",root->n,root->data); //根
	in_order(root->rchild); //右
}

//后序遍历
void post_order(bitree_t *root)
{
	if(NULL == root)
		return ;

	post_order(root->lchild); //左
	post_order(root->rchild); //右
	printf("(%d : %c) ",root->n,root->data); //根
}

bitree.h

#ifndef __BITREE_H__
#define __BITREE_H__

#include <string.h>
#include <stdio.h>
#include <stdlib.h>


#define N 6

typedef char data_t;

typedef struct bitree
{
	int n; //保存编号
	data_t data; //保存字符
	struct bitree *lchild; //保存左孩子的地址
	struct bitree *rchild; //保存右孩子的地址
}bitree_t;


extern bitree_t *create_binatry_tree(int n);
extern void pre_order(bitree_t *root);
extern void in_order(bitree_t *root);
extern void post_order(bitree_t *root);
#endif

main.c

#include "bitree.h"

 //            1:A
 //       2:B          3:C
 //   4:D   5:E      6:F
 //
 //前:  A B D E C F 
 //
 //中:  D B E A F C
 //
 //后:  D E B F C A
int main()
{
	bitree_t *root;

	root = create_binatry_tree(1);

	printf("create is successful!\n");


	printf("pre_order : ");
	pre_order(root);
	printf("\n");

	printf("in_order : ");
	in_order(root);
	printf("\n");

	printf("post_order : ");
	post_order(root);
	printf("\n");
	return 0;
}

最后运行上面的三个文件就可以实现二叉树的遍历咯~,跟着小珑一天学习一点点!加油!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值