7-1 建立二叉搜索树并查找父结点(PTA - 数据结构)

news2024/12/26 21:24:15

按输入顺序建立二叉搜索树,并搜索某一结点,输出其父结点。

输入格式:

输入有三行:
第一行是n值,表示有n个结点;
第二行有n个整数,分别代表n个结点的数据值;
第三行是x,表示要搜索值为x的结点的父结点。

输出格式:

输出值为x的结点的父结点的值。
若值为x的结点不存在,则输出:It does not exist.
若值为x的结点是根结点,则输出:It doesn't have parent.

输入样例:

2
20
30
20

输出样例:

It doesn't have parent.

###输入样例:

2
20
30
30

输出样例:

20

提交结果: 


思路分析:

        创建树,查找元素,设置一个指针指向查找的结点的父节点。(这道题我自己写,提交全是段错误,然后喂给文心一言,给我改了一下,过了俩检查点,我自己在文心一言给出结果上面改,最后全过了,离谱!)


初始代码(段错误版):含有老师PPT代码

//
// Created by DDD on 2023/12/20.
//
#include <stdio.h>
#include <malloc.h>

typedef struct BiTNode
{
    int data;
    struct BiTNode *lchild,*rchild;
}BiTNode;

void Init(BiTNode *t,int x){
    t->data = x;
    t->rchild = NULL;
    t->lchild = NULL;
}

BiTNode *insertNode(BiTNode *t,BiTNode *s){
    BiTNode *p,*q;
    if(t==NULL)
        return s;
    p = t;
    while (p){
        q = p;
        if(s->data == p->data)
            return t;
        if(s->data < p->data)
            p = p->rchild;
        else p = p->rchild;
    }
    if(s->data<q->data)
        q->lchild = s;
    else q->rchild = s;
    return t;
}

void Search(BiTNode *Head,int x){
    BiTNode *p,*q;
    p = Head;
    if(Head == NULL){
        printf("It does not exist.");
        return;
    }
    if(Head->data == x) {
        printf("It doesn't have parent.");
        return;
    }
    while(p){
        if(x == p->data){
            printf("%d",q->data);
            return;
        }
        q = p;
        if(x>p->data)
            p = p->rchild;
        else p=p->lchild;

    }
    printf("It does not exist.");
}

int main(){
    int n,x;
    scanf("%d",&n);
    BiTNode *SearchTree;
    scanf("%d",&x);
    Init(SearchTree,x);
    for (int i = 0; i < n-1; ++i) {
        scanf("%d",&x);
        BiTNode *insert = (BiTNode *) malloc(sizeof(BiTNode));
        Init(insert,x);
        SearchTree = insertNode(SearchTree,insert);
    }
    scanf("%d",&x);
    Search(SearchTree,x);
}

结果版代码:具有人工智能(人工+智能)的美感

#include <stdio.h>
#include <stdlib.h>

typedef struct BiTNode
{
    int data;
    struct BiTNode *lchild, *rchild;
} BiTNode;

void Init(BiTNode *t, int x) {
    t->data = x;
    t->lchild = t->rchild = NULL;
}

BiTNode *insertNode(BiTNode *t, BiTNode *s) {
    if (t == NULL) {
        t = (BiTNode *)malloc(sizeof(BiTNode));
        Init(t, s->data);
        return t;
    }
    if (s->data < t->data) {
        t->lchild = insertNode(t->lchild, s);
    } else if (s->data > t->data) {
        t->rchild = insertNode(t->rchild, s);
    }
    else if(s->data == t->data){
        return t;
    }// If data is same, you may choose to insert or not, based on your requirements.
    return t;
}

void Search(BiTNode *Head, int x) {
    BiTNode *q;
    if (Head == NULL) {
        printf("It does not exist.\n");
        return;
    }
    if (Head->data == x) {
        printf("It doesn't have parent.\n");
        return;
    }
    BiTNode *p = Head;
    while (p) {
        if (x == p->data) {
            printf("%d\n", q->data);
            return;
        }
        q = p;
        if (x < p->data) {
            p = p->lchild;
        } else {
            p = p->rchild;
        }
    }
    printf("It does not exist.\n");
}

int main() {
    int n, x;
    scanf("%d", &n);
    BiTNode *root = NULL; // Initialize the root as NULL. This will be our SearchTree.
    scanf("%d", &x);
    root = (BiTNode *)malloc(sizeof(BiTNode)); // Allocate memory for the root node.
    Init(root, x); // Initialize the root node.
    for (int i = 0; i < n - 1; ++i) {
        scanf("%d", &x);
        BiTNode *insert = (BiTNode *)malloc(sizeof(BiTNode)); // Allocate memory for the new node.
        Init(insert, x); // Initialize the new node.
        root = insertNode(root, insert); // Insert the new node into the binary search tree.
    }
    scanf("%d", &x);
    Search(root, x);
    free(root);
    return 0;
}


return -1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1327815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华清远见作业第十四天

思维导图 1、顺序表按元素删除 代码&#xff1a; int delete_num_delete(sqlist *list,datatype key) {int indexseek_num(list,key);//元素查找函数if(index-1){return -1;}delete_index(list,index);return 0; } 2、顺序表按照元素修改 代码&#xff1a; //顺序表按照元…

人流量监测识别摄像机

人流量监测识别摄像机是一种基于人工智能技术的智能监控设备&#xff0c;其主要功能是通过摄像头捕捉实时画面&#xff0c;利用深度学习算法对画面中的人数进行实时识别和统计。这种摄像机可以广泛应用于各种场合&#xff0c;如商场、车站、学校、医院等公共场所&#xff0c;以…

Transformer引领AI领域:从模型到平台,全方位探索与实践

编辑推荐 在不到4 年的时间里&#xff0c;Transformer 模型以其强大的性能和创新的思想&#xff0c;迅速在NLP 社区崭露头角&#xff0c;打破了过去30 年的记录。BERT、T5 和GPT 等模型现在已成为计算机视觉、语音识别、翻译、蛋白质测序、编码等各个领域中新应用的基础构件。…

es、MySQL 深度分页问题

文章目录 es 深度分页MySQL 深度分页 es 深度分页 es 深度分页问题&#xff0c;有点忘记了&#xff0c;这里记录一下 当索引库中有10w条数据&#xff0c;比如是商品数据&#xff1b;用户就是要查在1w到后10条数据&#xff0c;怎么查询。 es查询是从各个分片中取出前1w到后10条数…

redis 从0到1完整学习 (五):集合 IntSet 数据结构

文章目录 1. 引言2. redis 源码下载3. IntSet 数据结构4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;redis 常用命令》 《redi…

JavaOOP篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、构造方法能不能显式调用?二、什么是方法重载?三、构造方法能不能重写?能不能重载?四、内部类与静态内部类的区别?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,…

Springboot启动异常 OgnlException: sqlSelect [java.lang.NoSuchMethodError

完整的日志如下&#xff1a; Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression ew ! null and ew.sqlSelect ! null. Cause…

协作机器人(Collaborative-Robot)安全碰撞的速度与接触力

协作机器人&#xff08;Collaborative-Robot&#xff09;的安全碰撞速度和接触力是一个非常重要的安全指标。在设计和使用协作机器人时&#xff0c;必须确保其与人类或其他物体的碰撞不会对人员造成伤害。 对于协作机器人的安全碰撞速度&#xff0c;一般会设定一个上限值&…

Excel排序怎么做?记好这些正确操作!

“我是个职场新手&#xff0c;对excel的使用还不是很熟悉。但是我需要处理一份文件。有朋友可以简单介绍一下excel排序的操作方法吗&#xff1f;” Excel作为一个实用的办公工具&#xff0c;给用户带来了很多的方便。在使用excel时&#xff0c;排序功能是比较重要且常用的。我们…

轴承故障诊断分类模型全家桶-最全教程

Python轴承故障诊断 (一)短时傅里叶变换STFT-CSDN博客 Python轴承故障诊断 (二)连续小波变换CWT-CSDN博客 Python轴承故障诊断 (三)经验模态分解EMD-CSDN博客 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Trans…

打造明厨亮灶工程,需要哪些AI视频智能算法助力?

旭帆科技AI智能监控可以通过摄像头、传感器和数据处理等技术手段&#xff0c;实时监测厨房人员着装、行为与烟火等&#xff0c;对厨房实时监控进行分析与记录&#xff0c;从而实现明厨亮灶场景的搭建&#xff0c;保障食品安全和服务质量。 1、烟火识别 对于后厨来说&#xff0…

搭建动态网站之——基于Redhat8.6搭建Discuz论坛

目录 一、动态网站与静态网站区别 1、提供用户互动接口的动态网站 2、搭建动态网站的需求&#xff1a; 二、搭建步骤 第一步&#xff1a;www服务器配置 第二步;编辑网页文件 第三步&#xff1a;使用xftp 将Discuz包传到/discuz解压 1、将Discuz包移动到/discuz 2、解压…

双燃料发动机,预计2025年市场规模将达到39亿美元

双燃料发动机是一种可以使用两种不同类型的燃料&#xff08;通常是天然气和柴油&#xff09;运行的发动机&#xff0c;具有更大的灵活性和更低的排放。近年来&#xff0c;在对更清洁、更高效能源的需求不断增长的推动下&#xff0c;双燃料发动机市场增长迅速。 全球市场&#x…

End-to-End Object Detection with Transformers(2020)

文章目录 AbstractIntroductionThe DETR modelObject detection set prediction loss二元匹配匈牙利损失如下Bounding box loss DETR architecture Conclusion hh 源代码 Abstract 我们提出了一种将目标检测视为直接集预测问题的新方法。我们的方法简化了检测管道&#xff0c;…

VUE中的index.html、App.vue和main.js的关系

VUE中的index.html、App.vue和main.js的关系&#xff0c;个人理解。 javascriptCopy code import Vue from vue; import App from ./App.vue;new Vue({render: h > h(App), }).$mount(#app);

【工具与中间件】通过飞书应用操作云文档

文章目录 前言1. 准备工作1.1 创建应用1.2 创建文件夹 2. 测试租户/个人版实践2.1 权限配置2.2 控制台调试2.3 协作文档添加应用2.4 CRUD2.4.1 根据文档描述选择token并生成2.4.2 新增多维表格数据API2.4.3 删除多维表格数据API2.4.4 查询多维表格数据API2.4.5 修改多维表格数据…

CentOS7 安装 DockerCompose

目录 一、安装Docker 二、安装步骤 2.1 卸载 2.2 安装docker 2.3 启动docker 2.4 配置镜像加速器 一、安装Docker Docker 分为 CE 和 EE 两大版本。 CE 即社区版(免费&#xff0c;支持周期7个月)EE 即企业版强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月…

java连接PRINTRONIX T8000打印机打印标签及常见打印错误说明

需要注意的点&#xff1a;数据拼接时一定要在数据两边加上双引号&#xff0c;否则打印出来的东西会报错&#xff01;&#xff01;&#xff01; package com.tscsdk;import java.io.IOException; import java.net.Socket; import java.text.SimpleDateFormat; import java.util…

速度超快的单图像生成3D目标方案,创新的One-2-3-45++来了!

论文链接&#xff1a; https://arxiv.org/pdf/2311.07885 github链接&#xff1a; https://sudo-ai-3d.github.io/One2345plus_page/ Demo链接&#xff1a; https://www.sudo.ai/3dgen 最近在开放世界的3D目标生成方面取得了显著的进展&#xff0c;图像到3D的方法&#xff0c…

Datawhale聪明办法学Python(task6字符串)及作业题解版

一、课程基本结构 课程开源地址&#xff1a; 课程进度列表 - 聪明办法学 Python 第二版 章节结构&#xff1a; Chapter 0 安装 InstallationChapter 1 启航 Getting StartedChapter 2 数据类型和操作 Data Types and OperatorsChapter 3 变量与函数 Variables and Functions…