你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~
🍊自我介绍
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;
}
最后运行上面的三个文件就可以实现二叉树的遍历咯~,跟着小珑一天学习一点点!加油!