计科一二班算法数据结构实验9答案

简介: 计科一二班算法数据结构实验9答案

第一种做法:

/*=================
函数功能:计算叶子结点,查找x,计算x左子树
作者:令狐荣豪
时间:2019/5/
==================*/
#include<stdio.h>
#include<stdlib.h> 
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 10
//Status函数的类型,其值是函数结果状态代码,如OK等
typedef int Status;
typedef char DataType;
//二叉树链式存储的结构体 
typedef struct Node {
 DataType  data;
 struct Node *lchild;
 struct Node *rchild;
}BiTNode, *BiTree;
BiTree TRoot;
//先序序列创建二叉树 
Status CreateBiTree(BiTree *T)//&的意思是传进来节点指针的引用,目的是让传递进来的指针发生改变 
{
 char ch;
 scanf("%c", &ch); //输入字符 
 if (ch == '#') //判断字符是否为“#”
  *T = NULL; //将根节点置为NULL,结束该分支的的递归 
 else {
  if (!(*T = (BiTree)malloc(sizeof(BiTNode)))) //创建新结点空间 
   return OVERFLOW; //空间分配不成功则返回OVERFLOW 
  (*T)->data = ch; //将字符存储到结点的值域 
  CreateBiTree(&(*T)->lchild); //递归创建左子树 
  CreateBiTree(&(*T)->rchild); //递归创建右子树 
 }
 return OK;
}
void InOrderOut(BiTree T)//中序遍历一遍
{
 if (T)
 {
  InOrderOut(T->lchild);
  printf("%3c", T->data);
  InOrderOut(T->rchild);
 }
}
//求二叉树叶子结点个数 
int CountLeaf(BiTree T) {
 if (T == NULL){ 
  return (0); }
  
 if (T->lchild == NULL&&T->rchild == NULL)
 {
  return (1);
 }
  
 return (CountLeaf(T->lchild) + CountLeaf(T->rchild));
 
}
//在树中查找x是否存在 
BiTree Search(BiTree T, DataType x) {
 if (T->data == x)
  return T;
 if (T->lchild !=NULL)
  return Search(T->lchild, x);
 if (T->rchild != NULL)
  return Search(T->rchild, x);
 return NULL;
 
}
//查找T的左孩子 
BiTree SearchLchild(BiTree T) {
 BiTree p;
 if (T == NULL)
  return NULL;
 else
  return (T->lchild);
}
int main()
{
 DataType x;
 BiTree p, q;
 printf("请输入先序序列(虚结点用#表示):\n");
 if (CreateBiTree(&TRoot) == OK)
  printf("二叉树创建成功!\n");
 InOrderOut(TRoot);
 printf("\n叶子结点数为:%d\n", CountLeaf(TRoot));
 
 x=getchar();//消除存储区的回车字符
 printf("请输入要查找的元素:\n");
 x=getchar();
 p=Search(TRoot, x);
 if (p)
  printf("存在\n");
 else
  printf("不存在\n");
 q=SearchLchild(p);
 if (q)
  printf("左结点为%c",q->data);
 //其他操作代码
 return 0;

第二种做法:

/*=================
函数功能:计算叶子结点,查找x,计算x左子树
作者:令狐荣豪
时间:2019/5/
==================*/
#include<stdio.h>
#include<stdlib.h> 
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 10
//Status函数的类型,其值是函数结果状态代码,如OK等
typedef int Status;
typedef char DataType;
//二叉树链式存储的结构体 
typedef struct Node {
  DataType  data;
  struct Node *lchild;
  struct Node *rchild;
}BiTNode, *BiTree;
BiTree TRoot;
//先序序列创建二叉树 
Status CreateBiTree(BiTree *T)//&的意思是传进来节点指针的引用,目的是让传递进来的指针发生改变 
{
  char ch;
  scanf("%c", &ch); //输入字符 
  if (ch == '#') //判断字符是否为“#”
    *T = NULL; //将根节点置为NULL,结束该分支的的递归 
  else {
    if (!(*T = (BiTree)malloc(sizeof(BiTNode)))) //创建新结点空间 
      return OVERFLOW; //空间分配不成功则返回OVERFLOW 
    (*T)->data = ch; //将字符存储到结点的值域 
    CreateBiTree(&(*T)->lchild); //递归创建左子树 
    CreateBiTree(&(*T)->rchild); //递归创建右子树 
  }
  return OK;
}
void InOrderOut(BiTree T)//中序遍历一遍
{
  if (T)
  {
    InOrderOut(T->lchild);
    printf("%3c", T->data);
    InOrderOut(T->rchild);
  }
}
//求二叉树叶子结点个数 
int CountLeaf(BiTree T) {
  if (T == NULL){ 
    return (0); }
    
  if (T->lchild == NULL&&T->rchild == NULL)
  {
    return (1);
  }
    
  return (CountLeaf(T->lchild) + CountLeaf(T->rchild));
  
}
//在树中查找x是否存在 
BiTree Search(BiTree T, DataType x) {
  if (T->data == x)
    return T;
  if (T->lchild !=NULL)
    return Search(T->lchild, x);
  if (T->rchild != NULL)
    return Search(T->rchild, x);
  return NULL;
  
}
//查找T的左孩子 
BiTree SearchLchild(BiTree T) {
  BiTree p;
  if (T == NULL)
    return NULL;
  else
    return (T->lchild);
}
int main()
{
  DataType x;
  BiTree p, q;
  printf("请输入先序序列(虚结点用#表示):\n");
  if (CreateBiTree(&TRoot) == OK)
    printf("二叉树创建成功!\n");
  InOrderOut(TRoot);
  printf("\n叶子结点数为:%d\n", CountLeaf(TRoot));
  
  
  printf("请输入要查找的元素:\n");
  
  scanf("%s", &x);
  p=Search(TRoot, x);
  if (p)
    printf("存在\n");
  else
    printf("不存在\n");
  q=SearchLchild(p);
  if (q)
    printf("左结点为%c",q->data);
  //其他操作代码
  return 0;
}

第三种做法:

/*=================
函数功能:计算叶子结点,查找x,计算x左子树
作者:令狐荣豪
时间:2019/5/
==================*/
#include<stdio.h>
#include<stdlib.h> 
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 10
//Status函数的类型,其值是函数结果状态代码,如OK等
typedef int Status;
typedef char DataType;
//二叉树链式存储的结构体 
typedef struct Node {
 DataType  data;
 struct Node *lchild;
 struct Node *rchild;
}BiTNode, *BiTree;
BiTree TRoot;
//先序序列创建二叉树 
Status CreateBiTree(BiTree *T)//&的意思是传进来节点指针的引用,目的是让传递进来的指针发生改变 
{
 char ch;
 scanf("%c", &ch); //输入字符 
 if (ch == '#') //判断字符是否为“#”
  *T = NULL; //将根节点置为NULL,结束该分支的的递归 
 else {
  if (!(*T = (BiTree)malloc(sizeof(BiTNode)))) //创建新结点空间 
   return OVERFLOW; //空间分配不成功则返回OVERFLOW 
  (*T)->data = ch; //将字符存储到结点的值域 
  CreateBiTree(&(*T)->lchild); //递归创建左子树 
  CreateBiTree(&(*T)->rchild); //递归创建右子树 
 }
 return OK;
}
void InOrderOut(BiTree T)//中序遍历一遍
{
 if (T)
 {
  InOrderOut(T->lchild);
  printf("%3c", T->data);
  InOrderOut(T->rchild);
 }
}
//求二叉树叶子结点个数 
int CountLeaf(BiTree T) {
 if (T == NULL){ 
  return (0); }
  
 if (T->lchild == NULL&&T->rchild == NULL)
 {
  return (1);
 }
  
 return (CountLeaf(T->lchild) + CountLeaf(T->rchild));
 
}
//在树中查找x是否存在 
BiTree Search(BiTree T, DataType x) {
 if (T->data == x)
  return T;
 if (T->lchild !=NULL)
  return Search(T->lchild, x);
 if (T->rchild != NULL)
  return Search(T->rchild, x);
 return NULL;
 
}
//查找T的左孩子 
BiTree SearchLchild(BiTree T) {
 BiTree p;
 if (T == NULL)
  return NULL;
 else
  return (T->lchild);
}
int main()
{
 DataType x;
 BiTree p, q;
 printf("请输入先序序列(虚结点用#表示):\n");
 if (CreateBiTree(&TRoot) == OK)
  printf("二叉树创建成功!\n");
 InOrderOut(TRoot);
 printf("\n叶子结点数为:%d\n", CountLeaf(TRoot));
 //少用这种%c的输入法
 scanf("%c",&x);//消除存储区的回车字符
 printf("请输入要查找的元素:\n");
 scanf("%c",&x);
 p=Search(TRoot, x);
 if (p)
  printf("存在\n");
 else
  printf("不存在\n");
 q=SearchLchild(p);
 if (q)
  printf("左结点为%c",q->data);
 //其他操作代码
 return 0;



目录
打赏
0
0
0
0
42
分享
相关文章
|
27天前
|
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
47 9
 算法系列之数据结构-二叉树
|
25天前
|
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
40 3
 算法系列之数据结构-Huffman树
|
27天前
|
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
65 22
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
97 29
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
126 25
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
84 23
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
94 20
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
78 2
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
102 19
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
115 1

热门文章

最新文章