C语言 百分网手机站

C语言数据结构二叉树简单应用

时间:2020-08-17 11:58:35 C语言 我要投稿

C语言数据结构二叉树简单应用

  在计算机科学中,二叉树是每个节点最多有两个子树的树结构。本文是百分网小编搜索整理的关于C语言数据结构二叉树简单应用的相关资料,供参考学习,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!

  通常子树被称作“左子树”(left subtree)和“右子树”(right subtree),接下来我就在这里给大家介绍一下二叉树在算法中的简单使用:

  我们要完成总共有

  (1)二叉树的创建

  (2)二叉树的先中后序递归遍历

  (3)统计叶子结点的总数

  (4)求树的高度

  (5)反转二叉树

  (6)输出每个叶子结点到根节点的路径

  (7)输出根结点到每个叶子结点的路径。

  定义二叉树结点类型的结构体

  typedef struct node{

  char data;

  struct node *Lchild;

  struct node *Rchild;

  }BiTNode,*BiTree;

  int cnt=0;//统计叶子节点个数

  二叉树的创建

  BiTNode *Create(){ //二叉树的先序建立

  char ch;

  BiTNode *s;

  ch=getchar();

  if(ch=='#')erchashu

  return NULL;

  s=(BiTNode *)malloc(sizeof(BiTNode));

  s->data=ch;

  s->Lchild=Create();

  s->Rchild=Create();

  return s;

  }

  二叉树的先序、中序、后序递归遍历

  void PreOrder(BiTree root){   //前序遍历

  if(root){

  printf("%c ",root->data);

  PreOrder(root->Lchild);

  PreOrder(root->Rchild);

  }

  }

  void InOrder(BiTree root){   //中序遍历

  if(root){

  InOrder(root->Lchild);

  printf("%c ",root->data);

  InOrder(root->Rchild);

  }

  }

  void PostOrder(BiTree root){    //后序遍历

  if(root){

  PostOrder(root->Lchild);

  PostOrder(root->Rchild);

  printf("%c ",root->data);

  }

  }

  统计叶子结点个数:

  void LeafCountNode(BiTree root){  //统计叶子结点个数

  if(root){

  if(!root->Lchild && !root->Rchild)

  cnt++;

  LeafCountNode(root->Lchild);

  LeafCountNode(root->Rchild);

  }

  }

  输出各个叶子结点值:

  void IInOrder(BiTree root){ //输出各个叶子结点值

  if(root){

  IInOrder(root->Lchild);

  if(!root->Lchild && !root->Rchild)

  printf("%c ",root->data);

  IInOrder(root->Rchild);

  }

  }

  求树的高度:

  int PostTreeDepth(BiTree root){       //求树的`高度

  int h1,h2,h;

  if(root==NULL){

  return 0;

  }

  else{

  h1=PostTreeDepth(root->Lchild);

  h2=PostTreeDepth(root->Rchild);

  h=(h1>h2?h1:h2)+1;

  return h;

  }

  }

  反转二叉树:

  void MirrorTree(BiTree root){        //二叉树镜像树

  BiTree t;

  if(root==NULL)

  return;

  else{

  t=root->Lchild;

  root->Lchild=root->Rchild;

  root->Rchild=t;

  MirrorTree(root->Lchild);

  MirrorTree(root->Rchild);

  }

  }

  输出每个叶子结点到根节点的路径:

  void OutPutPath(BiTree root,char path[],int len){      //输出每个叶子结点到根节点的路径

  if(root){

  if(!root->Lchild && !root->Rchild){

  printf("%c ",root->data);

  for(int i=len-1;i>=0;i--)

  printf("%c ",path[i]);

  printf("\n");

  }

  path[len]=root->data;

  OutPutPath(root->Lchild,path,len+1);

  OutPutPath(root->Rchild,path,len+1);

  }

  }

  输出根到每个叶子结点的路径:

  void PrintPath(BiTree root,char path[],int l){     //输出根到每个叶子结点的路径

  int len=l-1;

  if(root){

  if(root->Lchild==NULL && root->Rchild==NULL){

  path[len]=root->data;

  for(int i=9;i>=len;i--)

  printf("%c ",path[i]);

  printf("\n");

  }

  path[len]=root->data;

  PrintPath(root->Lchild,path,len);

  PrintPath(root->Rchild,path,len);

  }

  }

  测试代码:

  int main(void){

  int h,len;

  char path[20];

  BiTree root;

  root=Create();

  // PreOrder(root);

  // printf("\n");

  // InOrder(root);

  // printf("\n");

  // PostOrder(root);

  // printf("\n");

  // LeafCountNode(root);

  // printf("叶子结点个数为:%d\n",cnt);

  // IInOrder(root);

  h=PostTreeDepth(root);

  printf("树的高度为:High=%d\n",h);

  // PrintTree(root,0);

  // MirrorTree(root);

  // PrintTree(root,0);

  // OutPutPath(root,path,0);

  // PrintPath(root,path,10);

  return 0;

  }

【C语言数据结构二叉树简单应用】相关文章:

C语言知识点及其简单应用10-02

C语言应用领域09-22

C语言的应用领域11-22

C语言的reduce方法应用11-20

浅谈C语言形象比喻应用11-18

C语言的应用有哪些11-14

C语言的HashTable简单实现11-21

C语言socket编程开发应用示例10-05

C++二叉树的镜像实例10-05

c语言入门:用qt实现简单IDE10-06