【算法设计题】查找给定结点的双亲结点(二叉树),第3题(C/C++)

news2024/10/2 10:24:31

目录

第3题 查找给定结点的双亲结点(二叉树)

得分点(必背)

题解 

定义函数和初始化变量:

处理特殊情况:

遍历树:

中序遍历左子树:

处理右子树:

返回结果:


🌈 嗨,我是命运之光!

🌌 2024,每日百字,记录时光,感谢有你,携手前行~

🚀 携手启航,我们一同深入未知的领域,挖掘潜能,让每一步成长都充满意义。


第3题 查找给定结点的双亲结点(二叉树)

编写算法,在以二叉链表存储的二叉树中已知某结点数据元素值x(该结点最多存在一个),求该结点的双亲结点

得分点(必背)

//查找给定结点的双亲结点
TreeNode* Find_X_Parent(TreeNode* T, int x){


    TreeNode* STACK[MAX_STACK];
    //用于保存当前结点的双亲结点
    TreeNode* Q=NULL;
    TreeNode* P=T;
    int top=-1;

    //判断特殊情况
    //如果树为空,或只有根结点,则无双亲结点
    if(T==NULL||(T->left==NULL&&T->right==NULL)){
        return NULL;
    }
    while(P!=NULL||top!=-1){
        //中序遍历左子树
        while(P!=NULL){
            if(P->data==x){
                return Q;
            }
            STACK[++top]=P;

            //保存双亲结点
            Q=P;
            P=P->left;
        }
        P=STACK[top--];
        //保存双亲结点
        Q=P;
        P=P->right;
    }
    return NULL;
}

题解 

定义函数和初始化变量
TreeNode* Find_X_Parent(TreeNode* T, int x) {
    TreeNode* STACK[MAX_STACK];
    TreeNode* Q = NULL; // 用于保存当前结点的双亲结点
    TreeNode* P = T;
    int top = -1;

该函数 Find_X_Parent 用于在二叉树 T 中查找值为 x 的结点的双亲结点。函数首先定义了一个栈 STACK,用于模拟递归调用栈,并定义了指针 QPQ 用于保存当前结点的双亲结点,P 用于遍历树。top 是栈顶指针,初始化为 -1。 

处理特殊情况
if (T == NULL || (T->left == NULL && T->right == NULL)) {
    return NULL;
}

如果树 T 为空,或者树只有根结点(没有左、右子结点),则直接返回 NULL,表示没有双亲结点。 

遍历树
while (P != NULL || top != -1) {

使用 while 循环模拟递归遍历树,条件是当前结点 P 不为空或栈不为空(即 top != -1)。 

中序遍历左子树
    while (P != NULL) {
        if (P->data == x) {
            return Q;
        }
        STACK[++top] = P;

        // 保存双亲结点
        Q = P;
        P = P->left;
    }

使用嵌套的 while 循环进行中序遍历的左子树。首先检查当前结点的值是否等于 x,如果是则返回 Q,即当前结点的双亲结点。否则,将当前结点 P 入栈,并保存 Q 为当前结点 P 的双亲结点,然后继续遍历左子树。 

处理右子树
    P = STACK[top--];
    // 保存双亲结点
    Q = P;
    P = P->right;

如果左子树遍历完毕,从栈中弹出一个结点,并处理其右子树。再次保存 Q 为当前结点 P 的双亲结点,然后继续遍历右子树。 

返回结果
return NULL;

如果遍历完所有结点仍未找到值为 x 的结点,则返回 NULL,表示树中不存在该结点,或该结点是根结点没有双亲结点。

#include <iostream>
#define MAX_STACK 50

using namespace std;

// 定义二叉树结点结构
struct TreeNode {
    int data;
    TreeNode* left;
    TreeNode* right;
};

// 创建一个新结点
TreeNode* newNode(int data) {
    TreeNode* node = new TreeNode();
    node->data = data;
    node->left = node->right = NULL;
    return node;
}

// 查找给定结点的双亲结点
TreeNode* Find_X_Parent(TreeNode* T, int x);

int main() {
    // 创建示例二叉树
    TreeNode* root = newNode(1);
    root->left = newNode(2);
    root->right = newNode(3);
    root->left->left = newNode(4);
    root->left->right = newNode(5);
    root->right->left = newNode(6);
    root->right->right = newNode(7);

    int x = 5;
    TreeNode* parent = Find_X_Parent(root, x);

    if (parent != nullptr) {
        cout << "节点 " << x << " 的双亲结点是: " << parent->data << endl;
    } else {
        cout << "节点 " << x << " 没有双亲结点(可能是根结点或不存在于树中)。" << endl;
    }

    return 0;
}

通过这个示例代码,可以创建一个二叉树并查找某个节点的双亲结点。 


嗨,我是命运之光。如果你觉得我的分享有价值,不妨通过以下方式表达你的支持:👍 点赞来表达你的喜爱,📁 关注以获取我的最新消息,💬 评论与我交流你的见解。我会继续努力,为你带来更多精彩和实用的内容。

点击这里👉 ,获取最新动态,⚡️ 让信息传递更加迅速。

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

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

相关文章

LSTM实战之预测股票

&#x1f4c8; 用PyTorch搭建LSTM模型&#xff0c;轻松预测股票价格&#xff01;&#x1f680; Hey小伙伴们&#xff0c;今天给大家带来一个超级实用的项目教程——如何用PyTorch和LSTM模型来预测股票价格&#xff01;&#x1f31f; &#x1f50d; 项目背景 我们都知道股市是…

《Unity3D网络游戏实战》学习与实践--制作一款大乱斗游戏

角色类 基类Base Human是基础的角色类&#xff0c;它处理“操控角色”和“同步角色”的一些共有功能&#xff1b;CtrlHuman类代表“操控角色”​&#xff0c;它在BaseHuman类的基础上处理鼠标操控功能&#xff1b;SyncHuman类是“同步角色”类&#xff0c;它也继承自BaseHuman&…

MySQL的数据结构B+tree以及SQL优化

首先呢&#xff0c;我们知道MySQL的数据结构为Btree,那么其结构究竟是什么样的&#xff0c;为什么选择Btree&#xff0c;而不选择Btree。下面我们从其结构分析 1.Btree平衡多路查找树 B-tree结构的数据可以让系统高效的找到数据所在的磁盘块。为了描述B-Tree,首先定义一条记录…

入门mem0.NET

入门mem0.NET 安装包 如果你的项目使用了EntityFrameworkCore,那么你可以跟随这个教程走 <ItemGroup><PackageReference Include"mem0.NET" Version"0.1.7" /><PackageReference Include"mem0.NET.Qdrant" Version"0.1.7…

云动态摘要 2024-08-04

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起&#xff01; [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造&…

java之IO篇——File、字节流、字符流

前言 IO流是用于读写文件中的数据&#xff0c;要读写文件之前可以创建文件获取文件对象再创建IO流&#xff0c;正文会先介绍File类&#xff0c;通过File类的构造方法获取文件的对象&#xff0c;创建文件或目录以及File类的一些方法获取文件对象的属性。后面还介绍了相关的IO流体…

Radxa ROCK 3C开发板编译Opencv,支持调用树莓派摄像头模块V2

目录 1、ROCK 3C和树莓派摄像头模块V2介绍2、ROCK 3C在rsetup开启支持3、测试指令4、编译Opencv4.1 增加swap&#xff0c;确保内存够用4.2 安装依赖和下载opencv4.3 编译参考链接 5、使用opencv调用树莓派摄像头模块V2 1、ROCK 3C和树莓派摄像头模块V2介绍 ROCK 3C 是一款基于…

刷题篇 - 01

目录 题目一&#xff1a; 题目二&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目五&#xff1a; 题目六&#xff1a; 题目七&#xff1a; 题目一&#xff1a; 387. 字符串中的第一个唯一字符 - 力扣&#xff08;LeetCode&#xff09; public int firstUniqC…

订单定时状态处理业务(SpringTask)

文章目录 概要整体架构流程技术细节小结 概要 订单定时状态处理通常涉及到对订单状态进行定期检查&#xff0c;并根据订单的状态自动执行某些操作&#xff0c;比如关闭未支付的订单、自动确认收货等. 需求分析以及接口设计 需求分析 用户下单后可能存在的情况&#xff1a; …

鸿蒙(API 12 Beta2版)NDK开发【内存管理purgeable内存开发指导】

场景介绍 HarmonyOS提供Purgeable Memory内存管理机制&#xff0c;开发者可以使用相关接口创建PurgeableMemory对象&#xff0c;从而管理purgeable内存。 开发者可以通过本指导了解在HarmonyOS应用中&#xff0c;如何使用Native层相关接口操作purgeable内存。功能包括purgeab…

Jupyter-Notebook常用操作看这一篇就够啦

来源&#xff1a; “码农不会写诗”公众号 链接&#xff1a;Jupyter-Notebook常用操作看这一篇就够啦 文章目录 01 概括02 快捷键总结03 运行外部python文件04 魔法命令4.1 运行计时4.2 查看变量与函数4.3 其它常用指令 书接上文 Jupyter-Notebook是一个基于 Web 的交互式开发环…

第十四节、受伤、死亡的逻辑和动画

一、受伤的动画效果 1齿轮控制当前动画图层的权重 2、层级 当前动画层为add&#xff0c;所以不会覆盖之前的动画层&#xff0c;而是添加一个动画层 3、受伤闪烁 调用颜色的值&#xff0c;实现受伤闪烁 4、录制动画 点击时间轴&#xff0c;插入关键帧 伤害图层选择add&…

2024华数杯C题解题思路、参考论文已出(无偿分享)~

C题&#xff1a;老外游中国 “数模加油站”团队出品~ 问题1&#xff1a; 解题思路&#xff1a; 1、数据准备&#xff1a; 导入352个城市的csv文件&#xff0c;提取每个城市中的100个景点的信息。 将每个景点的评分数据提取出来&#xff0c;形成一个包含35200个景点评分的列…

centos虚拟机restart网络后隔一会断联

1. 前言 不知道各位有没有遇到过虚拟机网络设置的坑&#xff0c;往往前一段时间用的好好的&#xff0c;突然网络又不行了无法连接外部网络&#xff0c;而且使用 service network restart 一瞬间可以&#xff0c;但是过一会就断连了… 2. 解决方案 根据对虚拟机网络的学习了解…

五、一个quad同时支持pcie和sfp两种高速接口的ref时钟配置

项目描述 上位机将截图数据通过 XDMA 写入到 FPGA 侧的 DDR 内存区域 1 中通过 axi_lite 接口给 axi_read_start 信号&#xff0c;通知 AXI_read 模块启动读取数据&#xff0c;然后通过 GTP TX 模块发送出去。经过光纤回环&#xff0c;GTP RX 端接收到数据&#xff0c;送给 AX…

今天的一件小事,亲身感受:付费是提高效率的重要途径

今天需要修改一个单页网站源码&#xff0c;有一个小问题困住我3个小时了。 毕竟我也不是专业的&#xff0c;没有系统学习过这些&#xff0c;搜答案都不知道怎么搜哈哈 吃过午饭&#xff0c;想着不能这么耗下去了&#xff0c;于是及时去了某宝&#xff0c;找到一个修改代码的 …

搭建nexus上传jar包,并结合jenkins运行项目

一、搭建nexus 1、docker拉取镜像 需要将docker原更新一下 https://blog.csdn.net/qx020814/article/details/140908006?spm1001.2014.3001.5502 docker pull sonatype/nexus3 创建nexus挂载文件、增加权限&#xff1a; mkdir docker_nexus3 mkdir docker_nexus3/nexus-data c…

TreeSize:免费的磁盘清理与管理神器,解决C盘爆满的燃眉之急

目录 TreeSize&#xff1a;免费的磁盘清理与管理神器&#xff0c;解决C盘爆满的燃眉之急 一、TreeSize介绍 二、下载安装TreeSize 2.1、下载地址 2.2、下载步骤 ​2.3、安装步骤 三、professional版的TreeSize试用 3.1、分析磁盘空间 3.2、显示拓展名统计信息 3.3、显…

将本地的业务写成成可供RPC远程调用的方法

第一步&#xff1a;首先我们先定义proto文件&#xff0c;这些proto文件将会为远程调用者提供调用的方法&#xff0c;为login方法。 2.重写UserServiceRpc类中的Login方法。 在Login中做的操作主要是&#xff0c;得到requst里面的参数&#xff0c;然后调用本地的Login方法&#…

可解释性终极追问,什么才是第一性解释?20篇CCF-A+ICLR论文给你答案

一、前言 长期以来&#xff0c;我们团队一直在思考可解释性领域的一个终极问题&#xff0c;即什么才是解释性领域的第一性原理&#xff1f;所谓第一性原理&#xff0c;目前没有一个被广泛接受的框架&#xff0c;世上本无路&#xff0c;我们需要逐渐去定义这样一个路。我们需要在…