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

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

输入格式:

输入有三行:
第一行是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.mfbz.cn/a/262729.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用ffmpeg cv2取h265码流视频(转换图片灰屏问题解决)

利用海康威视相机拍出来的视频是H265格式的&#xff0c;相比于常规的H264编码&#xff0c;压缩率更高&#xff0c;但因此如果直接用正常取流方法读取&#xff0c;会出现无法读取的情况 1. 如图h265码流取出图片为灰屏 2 、解决灰屏问题 import subprocess import cv2# 将h265流…

【MyBatis Plus】Service Mapper内置接口讲解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《MyBatis-Plus》。&#x1f3af;&#x1f3af; &am…

IXXAT NT系列高稳定性网关网桥解决方案

CAN网关网桥功能特点 在之前的文章中我们介绍了CAN中继器在实际场景中的使用&#xff0c;它通常用在CAN的信号远距离传输和降低干扰方面。 我们知道CAN中继器本身并不发出CAN数据帧&#xff0c;而是对CAN数据进行过滤。而CAN网桥则是将上一个网段中的CAN数据帧收取后&a…

自定义Taro上传图片hooks(useUploadImg)

有两个方法需要提前引入 FileUtil(上传文件的方法)、to&#xff08;对请求接口返回做了二次处理&#xff0c;数据和错误提示等&#xff09; //FileUtil export namespace FileUtil {const env {timeout: 10000,uploadImageUrl: "阿里云的地址",};const genPolicy …

【Java】Mac下的Tomcat安装配置

&#x1f514;Tomcat是一个免费的开源web应用服务器&#xff0c;是开发和调试JSP 程序的首选&#x1f590;可利用它响应HTML页面的访问请求。 我们在进行网络编程时&#xff0c;其中重要的中间件就是Tomcat&#xff0c;下面我们将进行在Mac上配置Tomcat的讲解。&#x1f632; …

LeetCode做题总结 1. 两数之和

1. 两数之和 暴力法哈希法重新分析Java语法 暴力法 2023.09.20 刚开始用暴力法破解&#xff08;C&#xff09; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> a;for(int i0; i<nums.size()-1; i) {for(…

企业网络常用网关冗余技术-VRRP协议原理与配置

局域网中的用户终端通常采用配置一个默认网关的形式访问外部网络&#xff0c;如果此时默认网关设备发生故障&#xff0c;将中断所有用户终端的网络访问&#xff0c;这很可能会给用户带来不可预计的损失&#xff0c;所以可以通过部署多个网关的方式来解决单点故障问题&#xff0…

PCB变压器相关记录

PCB平面变压器设计指南--转载自21世纪电源网_北京泰科斯德技术有限公司 PCB变压器电流密度

智能感知时代已来,汉威科技柔性传感器迎来发展新机遇

近年来&#xff0c;消费电子、医疗健康、智能汽车、人机交互等领域的黑科技产品不断出现&#xff0c;催生了许多新功能、新场景、新市场。 TWS耳机&#xff1a;许多TWS&#xff08;真无线立体声&#xff09;耳机厂商开始摒弃传统的触摸感应模式&#xff0c;转而采用最先进的压…

什么是小红书垂直达人,垂直达人优势在哪里?

有不少商家&#xff0c;在小红书平台投广告&#xff0c;来扩大产品和品牌声量时&#xff0c;我们第一时间优选的就是垂直达人。有不少商家和小伙伴会产生了疑问&#xff0c;为什么在投流时&#xff0c;要选择小红书垂直达人?今天&#xff0c;我们就为大家科普一下。 一、什么是…

等待队列头实现阻塞 IO(BIO)

文章目录 等待队列头实现阻塞 IO(BIO)模型等待队列头init_waitqueue_headDECLARE_WAIT_QUEUE_HEAD 等待队列项使用方法驱动程序应用程序模块使用参考 等待队列头实现阻塞 IO(BIO) 等待队列是内核实现阻塞和唤醒的内核机制。 等待队列以循环链表为基础结构&#xff0c;链表头和…

​​​​​​​配置MUX VLAN示例(接入层设备)

组网需求 在企业网络中&#xff0c;企业所有员工都可以访问企业的服务器。但对于企业来说&#xff0c;希望企业内部部分员工之间可以互相交流&#xff0c;而部分员工之间是隔离的&#xff0c;不能够互相访问。 如图1所示&#xff0c;为了解决上述问题&#xff0c;可在连接终端…

unity脚本API中OnCollisionEnter()、OnTriggerEnter()二者的区别

Unity中的OnCollisionEnter和OnTriggerEnter两个函数在日常的开发中很常见但也容易混淆&#xff0c;下面说一说两者的区别。 碰撞器&#xff08;Collider&#xff09;与触发器&#xff08;Trigger&#xff09;的概念 碰撞器&#xff08;Collider&#xff09;和触发器&#xff…

解锁高效工作!5款优秀工时管理软件推荐

工时管理&#xff0c;一直是让许多企业和团队头疼的问题。传统的纸质工时表、复杂的电子表格&#xff0c;不仅操作繁琐&#xff0c;还容易出错。幸好&#xff0c;随着科技的进步&#xff0c;我们迎来了工时管理软件的春天。今天&#xff0c;就让我们一起走进这个新时代&#xf…

虚幻学习笔记20—C++中用户输入控制

一、前言 用户输入主要有鼠标和键盘以及其他的遥感外接设备等&#xff0c;在虚幻中经常会用到这些输入设备的值&#xff0c;比如通过鼠标控制摄像头的方向、键盘控制人物移动等。本文主要讲解简单的输入绑定和虚幻5新增的”增强输入控制“两种方法。 二、实现 2.1、原始的输入…

安装stm32 ST-link utility完成后找不到mfc140.dll文件怎么处理

解决办法&#xff1a; Latest supported Visual C Redistributable downloads | Microsoft Learn 进入网站&#xff0c;下载安装完成即可

EOCR-i3M420/iFM420施耐德智能通讯保护继电器产品简介

EOCR-i3M420/iFM420是施耐德EOCR的新一代电子式电动机保护器产品&#xff0c;具有过电流、欠电流、缺相、逆相、堵转、失速、三相不平衡等保护功能&#xff0c;并具有4-20mA电流输出功能。EOCR-i3M420/iFM420是通讯型产品&#xff0c;提供Modbus RTU通讯协议&#xff0c;RS485接…

算法与数据结构--特殊有序集的线性时间排序算法

一.计数排序算法 基本思想&#xff1a;统计每个输入元素的个数&#xff0c;然后根据这些计数值重构原数组。 使用范围&#xff1a;需要知道元素大小范围&#xff0c;就是最大值是多少。 【排序算法】计数排序_哔哩哔哩_bilibili 二.基数排序 使用场景&#xff1a;只适用于…

【笔试强化】Day 7

文章目录 一、单选1.2.3.4.5.6.7.8.9.10. 二、编程1. 合法括号序列判断解法1&#xff1a;&#xff08;统计数量&#xff09;代码&#xff1a; 解法2&#xff1a;&#xff08;栈&#xff09;代码&#xff1a; 2. Fibonacci数列解法&#xff1a;代码&#xff1a; 一、单选 1. 正…

仓储1、10、11代电子标签接口文档

标签注册 仓储1代注册 侧面按钮连按三次&#xff0c; 注册成功&#xff1a;红灯变绿灯 仓储10代注册 右下角左下角组合按键触发注册 注册成功&#xff1a;右上角绿灯变红灯 仓储11代注册 磁体靠近条码附近&#xff0c;触发标签注册到系统 注册成功&#xff1a;闪红灯边绿…