首页 > 其他分享 >西北电专电院_数据结构上机报告记录_第三次上机报告

西北电专电院_数据结构上机报告记录_第三次上机报告

时间:2023-11-24 21:24:35浏览次数:38  
标签:Node 上机 报告 data 二叉树 printf 数据结构 root 节点

内容比较简单,和其他院的上机比起来说是这样的

实现二叉树的基本操作,二叉树使用链式结构建立,基本操作基本用递归实现

 

1. 问题描述 二叉树的基本操作; (1)创建二叉树,需注意此处是按照先序法输入 (2)通过先序遍历、中序遍历、后序遍历分别输出二叉树 (3)求取二叉树的结点总数、树的深度   2.数据结构设计 二叉树,用链式结构   3.算法设计 按照要求写出对应函数实现功能即可,包括先序输入,遍历和求结点数、树深度等.一般都是递归实现   4.运行、测试与分析

 

5.附录:源代码
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 // 二叉树节点定义
  5 typedef struct Node {
  6     int data;
  7     struct Node* left;
  8     struct Node* right;
  9 } Node;
 10 
 11 // 创建二叉树
 12 Node* createBinaryTree() {
 13     int data;
 14     printf("请输入节点数据(输入-1表示空节点):");
 15     scanf("%d", &data);
 16 
 17     if (data == -1) {
 18         return NULL;
 19     }
 20 
 21     Node* newNode = (Node*)malloc(sizeof(Node));
 22     newNode->data = data;
 23 
 24     printf("输入 %d 的左子节点:\n", data);
 25     newNode->left = createBinaryTree();
 26 
 27     printf("输入 %d 的右子节点:\n", data);
 28     newNode->right = createBinaryTree();
 29 
 30     return newNode;
 31 }
 32 
 33 // 先序遍历二叉树
 34 void preOrderTraversal(Node* root) {
 35     if (root != NULL) {
 36         printf("%d ", root->data);
 37         preOrderTraversal(root->left);
 38         preOrderTraversal(root->right);
 39     }
 40 }
 41 
 42 // 中序遍历二叉树
 43 void inOrderTraversal(Node* root) {
 44     if (root != NULL) {
 45         inOrderTraversal(root->left);
 46         printf("%d ", root->data);
 47         inOrderTraversal(root->right);
 48     }
 49 }
 50 
 51 // 后序遍历二叉树
 52 void postOrderTraversal(Node* root) {
 53     if (root != NULL) {
 54         postOrderTraversal(root->left);
 55         postOrderTraversal(root->right);
 56         printf("%d ", root->data);
 57     }
 58 }
 59 
 60 // 计算二叉树节点总数
 61 int countNodes(Node* root) {
 62     if (root == NULL) {
 63         return 0;
 64     }
 65 
 66     return 1 + countNodes(root->left) + countNodes(root->right);
 67 }
 68 /*
 69 这是一个用于计算二叉树节点数量的递归函数。函数接收一个指向二叉树根节点的指针 root,并返回二叉树中节点的总数。
 70 首先,函数会检查传入的根节点是否为空(NULL)。如果是空节点,则表示当前子树为空,直接返回0作为节点数。
 71 如果根节点不为空,函数将会进行递归调用。它通过分别对左子树和右子树调用 countNodes 函数来计算它们各自的节点数,并将结果相加。然后再加上当前根节点本身,最终得到整个二叉树的节点数。
 72 可以通过调用该函数并传入二叉树的根节点来获取二叉树中的节点总数。
 73  */
 74 
 75 // 计算二叉树的深度
 76 int calculateDepth(Node* root) {
 77     if (root == NULL) {
 78         return 0;
 79     }
 80 
 81     int leftDepth = calculateDepth(root->left);
 82     int rightDepth = calculateDepth(root->right);
 83 
 84     return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
 85 }
 86 /*
 87 这是一个计算二叉树深度的递归函数。它接受一个指向根节点的指针,然后通过递归的方式计算左子树和右子树的深度,并返回较大值加1作为整棵树的深度。
 88 首先,函数会检查根节点是否为空,如果为空则返回0表示空树的深度为0。
 89 然后,它分别调用 calculateDepth 函数来计算左子树和右子树的深度,并将结果保存在 leftDepth 和 rightDepth 变量中。
 90 最后,函数会比较左子树和右子树的深度大小,并将较大值加1作为整棵树的深度返回。
 91 @return
 92  */
 93 int main() {
 94     Node* root = createBinaryTree();
 95 
 96     printf("先序遍历结果:");
 97     preOrderTraversal(root);
 98 
 99     printf("\n中序遍历结果:");
100     inOrderTraversal(root);
101 
102     printf("\n后序遍历结果:");
103     postOrderTraversal(root);
104 
105     int nodeCount = countNodes(root);
106     printf("\n二叉树的节点总数为:%d\n", nodeCount);
107 
108     int depth = calculateDepth(root);
109     printf("二叉树的深度为:%d\n", depth);
110 
111     return 0;
112 }

 

标签:Node,上机,报告,data,二叉树,printf,数据结构,root,节点
From: https://www.cnblogs.com/WCMS-XDU688/p/17854787.html

相关文章

  • IDC最新报告,增速减缓+AI增势,阿里云视频云中国市场第一
    :::hljs-center国际权威数据公司IDC发布《中国视频云市场跟踪(2023H1)》报告自2018年至今,阿里云持续保持中国视频云整体市场第一整体市场占比达24.4%:::01第一之外,低谷之上近期,国际权威数据公司IDC最新发布了《中国视频云市场跟踪》,2023上半年中国视频云市场规模达到46.2......
  • Java实验报告五
    实验五实验名称:文件与I/O流实验目的:掌握文件与输入输出流的使用。实验时间:(2学时)实验类型:验证型实验内容:1.创建类:FindFile.java,遍历当前目录,打印目录中文件名称,目录打印”isDirectory”,文件打印“isfile”。修改程序打印当前目录及子目录信息。提示:当前目录名用......
  • Java实验报告
    实验一实验名称:JAVA中循环结构实验目的:熟悉循环结构,熟悉JAVA类的定义以及参数的传递。实验时间:(2学时)实验类型:验证型实验内容:(1)金字塔:Pyramid.java在屏幕上显示一个由星型符号“*”组成的金字塔图案,要求用户设置金字塔的高度,程序能根据用户设置的高度打印金字塔,......
  • 平台工程时代的 Kubernetes 揭秘:2023年生产状况报告深度剖析
    Kubernetes在生产环境中的复杂性已经成为常态,在2023年这个平台工程盛行的时代,容器管理的最大亮点可能在于其灵活性,然而在运维政策和治理等方面仍然存在诸多挑战。八年过去了,在生产环境中使用Kubernetes仍然需要面临许多挑战。 SpectroCloud刚刚与DimensionalResearch合......
  • 【数据结构】lxl 的 DS 修炼
    线段树&平衡树用线段树/平衡树维护的序列问题可以分为两类:1.静态型:维护一个类似于\(\sum_{l,r}....\)的值,或者是多次询问区间或全局的一些特征值。2.动态型:支持动态修改和动态询问区间信息的类型。对于静态型,我们通常首先思考怎样求单个区间的答案值,同理,动态型通常先考虑......
  • 今日报告
    在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:1.新的具体聊天室中发送的图片大小不得超过20M。2.新的具体聊天室中发送的文字长度不得超过100个字符。3.新的具体会员类可以发送图片信息和文本信息。4.新的具体会员类在发送文本信息时,可以......
  • 今日报告
    昨天看了国足对战韩国的比赛吗,果不其然,中国输了,裁判帮了韩国的大忙,那个点球实在不应该,可恶的贾西姆,眼瞎。不过这次感觉国足的比赛还行,能看的过去,加油。今天也算是完成了建明老师的阶段一,很难,明天继续加油,开始夫婿四六级英语和大数据的相关知识。......
  • 【linux上机实验】实验七 Linux开发工具的使用(二)(持续更新中)
    1.使用gdb调试下列程序,练习gdb命令。#include<stdio.h>#include<string.h>#include<stdlib.h>voidmy_print(char*string){printf("Thestringis\"%s\"\n",string);}voidmy_print2(char*string){ char*string2; intsize......
  • IBM大型新能源行业供应链管理及产销协同管理规划报告 P108
    本人在四大咨询机构从事咨询工作多年,二十年一线数字化规划咨询经验,提供制造业数智化转型规划服务,顶层规划/企业架构/数据治理/数据安全解决方案资料干货.该PPT共107页,由于篇幅有限,以下为部分资料,如需完整原版 方案,点击下方。本文来源于网络,侵权立删。新能源行业供应链管理诊断是......
  • 软件第三方测评报告可作哪些用途?
    软件第三方测评报告是指由独立、中立的第三方机构对软件进行全面、客观、科学的评估和分析后所做的报告。该报告基于系统而严密的评测流程,通过多项指标和标准,对软件的性能、功能、易用性、安全性等方面进行评价,为用户提供一个权威、可靠的参考。具体可作以下用途:1、为用户......