普通的二叉树和完全二叉树的创建方法

#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int value;
struct  node *left_child;
struct  node *right_child;
}BinaryTree;


#define bj 0


//*****************Create_funcation_1*****************

此方法是最基础的方法  这种方法 要求二叉树的数据足够的少

BinaryTree* create_1(){
BinaryTree *p=NULL;
p=(BinaryTree*)malloc(sizeof(BinaryTree));
p->value=1;

p->left_child=(BinaryTree*)malloc(sizeof(BinaryTree));
p->left_child->value=2;

p->left_child->left_child=(BinaryTree*)malloc(sizeof(BinaryTree));
p->left_child->left_child->value=4;
p->left_child->left_child->left_child=NULL;
p->left_child->left_child->right_child=NULL;


p->left_child->right_child=(BinaryTree*)malloc(sizeof(BinaryTree));
p->left_child->right_child->value=5;
p->left_child->right_child->left_child=NULL;
p->left_child->right_child->right_child=NULL;
    
    p->right_child=(BinaryTree*)malloc(sizeof(BinaryTree));
p->right_child->value=5;

p->right_child->left_child=(BinaryTree*)malloc(sizeof(BinaryTree));
p->right_child->left_child->value=6;
p->right_child->left_child->left_child=NULL;
p->right_child->left_child->right_child=NULL;

p->right_child->right_child=NULL;

return p;
}


//****************************create_funcation_2****************************8

二叉树的先序创建  (递归实现)

void create_2(BinaryTree **p){
int date;
scanf("%d",&date);
if(date==bj)  return;
*p=(BinaryTree*)malloc(sizeof(BinaryTree));
(*p)->value=date;
(*p)->left_child=NULL;
(*p)->right_child=NULL;
create_2(&(*p)->left_child);
create_2(&(*p)->right_child);
}


//****************************create_funcation_3*******************************8

完全二叉树的实现(传入数组以及数组的长度 )  数组元素的先后就是每一层的数据的先后书序(从上到下 从左到右)

BinaryTree* create_3(int a[],int length){
BinaryTree *p=(BinaryTree*)malloc(sizeof(BinaryTree)*length);
for(int i=0;i<length;i++){
p[i].value=a[i];
p[i].left_child=NULL;
p[i].right_child=NULL;
}
for(int i=0;i<=length/2-1;i++){
if(2*i+1<length){
p[i].left_child=&p[2*i+1];
}
if(2*i+2<length){
p[i].right_child=&p[2*i+2];
}
}
return p;
}

二叉树的先序遍历
void PreTraver(BinaryTree *p){
if(p==NULL)  return ;
printf("%d ",p->value);
PreTraver(p->left_child);
PreTraver(p->right_child);
}

二叉树的中序遍历
void PmTraver(BinaryTree *p){
if(p==NULL)  return ;
PmTraver(p->left_child);
printf("%d ",p->value);
PmTraver(p->right_child);
}

二叉树的后序遍历
void PhTraver(BinaryTree *p){
if(p==NULL)  return ;
PhTraver(p->left_child);
PhTraver(p->right_child);
printf("%d ",p->value);
}

int main(){
BinaryTree *p_1=NULL;
p_1=create_1();
printf("*************************************\n");
PreTraver(p_1);
printf("\n***********************************\n");
PmTraver(p_1);
printf("\n***********************************\n");
PhTraver(p_1);
printf("\n******************************************************\n");

BinaryTree *p_2=NULL;
create_2(&p_2);
printf("*************************************\n");
PreTraver(p_2);
printf("\n***********************************\n");
PmTraver(p_2);
printf("\n***********************************\n");
PhTraver(p_2);
printf("\n*******************************************************\n");

BinaryTree *p_3=NULL;
int a[]={1,2,3,4,5,6};
p_3=create_3(a,sizeof(a)/sizeof(a[0]));
printf("\n***********************************\n");
PreTraver(p_3);
printf("\n***********************************\n");
PmTraver(p_3);
printf("\n***********************************\n");
PhTraver(p_3);
printf("\n*******************************************************\n");
return 0;
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值