二叉树的定义
偷个小懒😅~
附上有道云笔记的截图
https://note.youdao.com/ynoteshare1/index.html?id=c3cffaf20bd4a1c615fc78a9e1d60817&type=note
递归的方式遍历 比较粗暴
只需要调整输出当前节点的位置即可
- 先序
printf("%c ", (*bTree)->data); // 打印当前节点
pre_order_show(&(*bTree)->letfc); // 遍历左孩子
pre_order_show(&(*bTree)->rightc); // 遍历又孩子
- 中序
in_order_show(&(*bTree)->letfc); // 遍历左孩子
printf("%c ", (*bTree)->data); // 打印当前节点
in_order_show(&(*bTree)->rightc); // 遍历又孩子
- 后序
post_order_show(&(*bTree)->letfc); // 遍历左孩子
post_order_show(&(*bTree)->rightc); // 遍历又孩子
printf("%c ", (*bTree)->data); // 打印当前节点
附上代码
#include <stdio.h>
#include <stdlib.h>
typedef struct BTNode
{
char data;
struct BTNode *letfc; // 左孩子指针
struct BTNode *rightc; // 右孩子指针
}BTNode, *BTree;
// 递归创建 二叉树
void init_binary_tree(BTree *bTree)
{
char a;
scanf("%c",&a);
if(a == '*')
{
*bTree = NULL;
}
else
{
*bTree = (BTree)malloc(sizeof(BTNode));
if (bTree == NULL)
{
printf("创建失败,退出");
exit(-1);
}
(*bTree)->data = a;
init_binary_tree(&(*bTree)->letfc);
init_binary_tree(&(*bTree)->rightc);
}
}
// 先序遍历显示
void pre_order_show(BTree *bTree)
{
if (*bTree != NULL)
{
printf("%c ", (*bTree)->data); // 打印当前节点
pre_order_show(&(*bTree)->letfc); // 遍历左孩子
pre_order_show(&(*bTree)->rightc); // 遍历又孩子
}
}
// 中序遍历显示
void in_order_show(BTree *bTree)
{
if (*bTree != NULL)
{
in_order_show(&(*bTree)->letfc); // 遍历左孩子
printf("%c ", (*bTree)->data); // 打印当前节点
in_order_show(&(*bTree)->rightc); // 遍历又孩子
}
}
// 后序遍历显示
void post_order_show(BTree *bTree)
{
if (*bTree != NULL)
{
post_order_show(&(*bTree)->letfc); // 遍历左孩子
post_order_show(&(*bTree)->rightc); // 遍历又孩子
printf("%c ", (*bTree)->data); // 打印当前节点
}
}
int main()
{
BTree bTree;
// 申明二叉树
// char data[] = "123**4**56**7**";
// 初始二叉树
// 1
// 2 5
// 3 4 6 7
// 二叉树初始化
printf("初始数据模板\n");
printf("123**4**56**7**\n");
printf("请输入前序二叉树\n");
init_binary_tree(&bTree);
printf("先序遍历\n");
pre_order_show(&bTree);
printf("\n");
printf("中序遍历\n");
in_order_show(&bTree);
printf("\n");
printf("后序遍历\n");
post_order_show(&bTree);
printf("\n");
return 0;
}