二叉树的存储及基本操作

实验题目: 二叉树的存储及基本操作

一、实验目的
1、掌握二叉树的二叉链表存储实现;
2、掌握在二叉链表上的基本操作;
3、掌握二叉排序树的二叉链表存储实现;
4、掌握二叉排序树的在二叉链表上的基本操作。
二、实验作业
在给出部分代码的基础上完成:
1、已知,二叉树中的元素是整型的,在给出部分参考代码的基础上完成:
在二叉链表存储体上实现二叉树的存储后,编写程序完成输出该二叉中大于x,小于y的结点元素及存储结点的地址,将编写好的函数在主函数的调用。
void countBitree( node* t,int x,int y)
2、某整型元素构成的二叉排序树,采用二叉链表方式进行了存储,请编写程序完成在该链表进行输出大于x,小于y的元素个数及相应的元素的函数,将编写好的函数在主函数的调用。
void outsum ( node* t,int x,int y)
3、对该二叉排序树中的节点进行从大到小的输出
void out ( node* t)
三、实验内容
1、

//#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
typedef struct node
{ int data;
  struct node *lchild,*rchild;
}node;
/*一棵二叉树*/
node* CreatBT()
{ node* t;
  int c;
  scanf("%d",&c);
  if(c==1)
    return NULL;
  else
  { t=(node*)malloc(sizeof(node));
    t->data=c;
    t->lchild=CreatBT();
    t->rchild=CreatBT();
    return t;
  }
}
/*前序遍历二叉树*/
void PreorderBT(node* t)
{ if(t!=NULL)
  {  printf("%d",t->data);
    PreorderBT(t->lchild);
    PreorderBT(t->rchild);
      }
 }
 /*中序遍历二叉树*/
void midorderBT(node* t)
{ if(t!=NULL)
  {
    midorderBT(t->lchild);
    printf("%d",t->data);
    midorderBT(t->rchild);
      }
 }

 /*后序遍历二叉树*/
void backorderBT(node* t)
{ if(t!=NULL)
  { backorderBT(t->lchild);
    backorderBT(t->rchild);
    printf("%d",t->data);
      }
 }
  /*求解二叉树高度的程序*/

  int lengthBT(node* t)
{    int t1,t2;
  if(t==NULL)
      return 0;
   else
   {       t1=lengthBT(t->lchild);
            t2=lengthBT(t->rchild);
           if(t1>=t2)
               return (t1+1);
             else
               return (t2+1);
          
    }
 }
 /*求解二叉树叶子结点个数的程序*/
 int sumyeBT(node* t)
 {  int t1,t2;
   if(t==NULL)
      return 0;
     else
   {   if(t->lchild==NULL&&t->rchild==NULL)
        return 1;
         else
        {   t1=sumyeBT(t->lchild);
            t2=sumyeBT(t->rchild);
             return (t1+t2);
          }
         }
 } 
   /*求解二叉树结点数目的程序*/
  int sumBT(node* t)
 {  int t1,t2;
   if(t==NULL)
      return 0;
     else
      { t1=sumBT(t->lchild);
       t2=sumBT(t->rchild);
        return (t1+t2+1);
       }

 } 
void main()
{ node* t;int x,y,a;
  t=CreatBT();
  printf("Preorder: ");
  PreorderBT(t);
  printf("\n");
   printf("mideorder: ");
  midorderBT(t);
  printf("\n");
  printf("backeorder: ");
  backorderBT(t);
  printf("\n");
   printf("er cha shu de gaoduo: ");
  x=lengthBT(t);
  printf("%d",x);
    printf("\n");
  printf("er cha shu de ye zi ge shu: ");
  y=sumyeBT(t);
  printf("%d",y);
     printf("\n");
  printf("er cha shu de jie diao  shu mu: ");
  a=sumBT(t);
  printf("%d",a);
 
}

四、实验结果
(实验结果截图)

在这里插入图片描述

五、实验心得
(心得体会,书写要详细、具体,包括问题及解决办法或者方法)

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半夏风情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值