完全二叉树的递归创建思路及代码
文章目录
- 🍊自我介绍
- 🍊创建思路
- 图形
- 完全二叉树的结论
- 设计图例
- 🍊创建代码编写
- bitree.c
- bitree.h
- main.c
你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~
🍊自我介绍
Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾” 和“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的内容。
🍊创建思路
图形
1,2,3,4,5,6表示的是节点的编号,a,b,c,d,e,f表示的是节点的相关数据。
完全二叉树的结论
有n个结点,对于编号为i(i>=1)的结点:
(1)左孩子存在:2 * i <= n(结点个数),左孩子编号为2 * i <= n
(2)右孩子存在:2 * i + 1 <= n,右孩子编号2 * i + 1 <= n
我们根据左右孩子存在的条件及递归运用编写相关的代码。
设计图例
🍊创建代码编写
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;
}
bitree.h
#ifndef __BITREE_H__
#define __BITREE_H__
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define N 3
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);
#endif
main.c
#include "bitree.h"
int main()
{
bitree_t *root;
root = create_binatry_tree(1);
printf("create is successful!\n");
return 0;
}