树和二叉树的操作

xiaoxiao2021-02-28  55

基础:结构体,指针,二叉树。

本文编译环境:Dev c++ 5.4.0

语言:c

序言:二叉树简单来说就是数据加上两个指针域指向两个子结点,难在遍历上的一些操作,这里讲下,建立,凹入显示,求深度和宽度的操作。

#include <stdio.h> #include <stdlib.h> typedef struct BT//建立结构体  { char data;//数据  BT *right;//右节点  BT *left;//坐节点  }BT; BT *Greatetree()//建立二叉树  { BT *t; char c; scanf("%c",&c); getchar();//吸收换行符号  if(c=='0') t=NULL;//判断结束  else { t=(BT *)malloc(sizeof(BT)); t->data=c; printf("请输入%c的左子结点\n",t->data); t->left=Greatetree(); printf("请输入%c的右子结点\n",t->data); t->right=Greatetree(); } return t; } void Showtree(int level,int n,BT *t)// 凹入显示  { int i; if(t!=NULL) { for(i=0;i<4*level;i++) printf(" "); printf("%c (-)",t->data,n); for(i=20-4*level;i>0;i--) printf("-"); printf("\n"); Showtree(level+1,-1,t->left); Showtree(level+1,1,t->right); } } int Numlenth(BT *t) { if(t!=NULL) { return (1+Numlenth(t->right))>(1+Numlenth(t->left))?(1+Numlenth(t->right)):(1+Numlenth(t->left)); }//返回深度高的  } int Weith(int n[],BT *t,int i) { if(t!=NULL) { n[i]++; Weith(n,t->right,i+1); Weith(n,t->left,i+1); } } int Numweith(BT *t,int L)//查看宽度  { int n[L],max=0,i;//数组用来存储每层深度的宽度  for(i=0;i<L;i++) { n[i]=0;//初始化  } Weith(n,t,0); //求值  for(i=0;i<L;i++) { if(n[i]>max) max=n[i];//求最大值  } printf("宽度为%d\n",max); } int main() { BT *T; //初始化  printf("请输入根结点\n"); T=Greatetree();//创建  Showtree(1,0,T);//查看  int L=Numlenth(T);//求深度  printf("%深度为%d\n",L); Numweith(T,L);//求宽度 return 0; }

结果

这些代码都是跑过的,建议大家还是自己亲手敲一遍加深印象,作者这里也是一字一字敲出来的,要避免眼高手低。

本章的内容有误或者不懂的地方,大家可以私信我,我也会第一时间回复大家的,差不多暑假两个月,复习下这些基本知识,其他的问题也可以问我,就算我不知道的,在能力范围之内的一定竭尽全力为你们解答。我的QQ:932824098.

转载请注明原文地址: https://www.6miu.com/read-2627359.html

最新回复(0)