【数据结构与算法】求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值

news2024/12/23 6:42:24

题目

  Qestion:求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。


数据结构与定义

typedef struct TreeNode
{
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode;

二叉树形状

在这里插入图片描述


核心代码

void FindLongesetPath(TreeNode *node, int length, int *MaxLength, int *currentPath, int *longestPath)
{
    // 该节点不存在
    if (node == NULL)
        return;
    // 该结点存在
    else
    {
        // 先记录当前结点的值,随后长度加一
        currentPath[length] = node->val;
        length = length + 1;
        // 已经到达叶子节点
        if (node->left == NULL && node->right == NULL)
        {
            if (*MaxLength < length)
            {
                *MaxLength = length;
                for (int i = 0; i < *MaxLength; i++) // 更新最长路径
                {
                    longestPath[i] = currentPath[i];
                }
            }
            return;
        }
        // 还有子结点
        else
        {
            FindLongesetPath(node->left, length, MaxLength, currentPath, longestPath);
            FindLongesetPath(node->right, length, MaxLength, currentPath, longestPath);
        }
    }
}

核心代码快照

在这里插入图片描述


全部代码(可运行)

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

typedef struct TreeNode
{
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode;

// 输入二叉树
void inputTree(TreeNode *root)
{
    root->val = 1;
    root->left = (TreeNode *)malloc(sizeof(TreeNode));
    root->left->val = 2;
    root->left->left = (TreeNode *)malloc(sizeof(TreeNode));
    root->left->right = (TreeNode *)malloc(sizeof(TreeNode));
    root->left->left->val = 4;
    root->left->left->left = NULL;
    root->left->left->right = NULL;
    root->left->right->val = 5;
    root->left->right->left = NULL;
    root->left->right->right = NULL;

    root->right = (TreeNode *)malloc(sizeof(TreeNode));
    root->right->val = 3;
    root->right->left = (TreeNode *)malloc(sizeof(TreeNode));
    root->right->left->val = 6;
    root->right->left->left = (TreeNode *)malloc(sizeof(TreeNode));
    root->right->left->left->val = 8;
    root->right->left->left->left = NULL;
    root->right->left->left->right = NULL;
    root->right->left->right = NULL;
    root->right->right = (TreeNode *)malloc(sizeof(TreeNode));
    root->right->right->val = 7;
    root->right->right->left = NULL;
    root->right->right->right = NULL;
}

void FindLongesetPath(TreeNode *node, int length, int *MaxLength, int *currentPath, int *longestPath)
{
    // 该节点不存在
    if (node == NULL)
        return;
    // 该结点存在
    else
    {
        // 先记录当前结点的值,随后长度加一
        currentPath[length] = node->val;
        length = length + 1;
        // 已经到达叶子节点
        if (node->left == NULL && node->right == NULL)
        {
            if (*MaxLength < length)
            {
                *MaxLength = length;
                for (int i = 0; i < *MaxLength; i++) // 更新最长路径
                {
                    longestPath[i] = currentPath[i];
                }
            }
            return;
        }
        // 还有子结点
        else
        {
            FindLongesetPath(node->left, length, MaxLength, currentPath, longestPath);
            FindLongesetPath(node->right, length, MaxLength, currentPath, longestPath);
        }
    }
}

int main()
{
    int maxLength = 0;
    int Length = 0;
    int currentPath[20]; // 当前路径
    int longestPath[20]; // 最长路径
    TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
    // 输入二叉树
    inputTree(root);
    FindLongesetPath(root, Length, &maxLength, currentPath, longestPath); // 查找第一个最长的路径
    printf("第一个最长路径上的结点为:");
    for (int i = 0; i < maxLength; i++)
    {
        printf("%d ", longestPath[i]);
    }
    return 0;
}

结束语

  因为是算法小菜,所以提供的方法和思路可能不是很好,请多多包涵~如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!

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

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

相关文章

ChatGPT越来越火,大厂体验设计师纷纷“毕业”?

2020年至2022年是很艰难的三年&#xff0c;全球经济受到沉重打击&#xff0c;我国也不例外。再加上人口红利的削弱&#xff0c;作为体验领域排头兵的互联网行业已经从巅峰状态回落下来&#xff0c;行业光环几乎消失。随之而来的是&#xff0c;国内各个大厂先后开始“降本增效”…

如何在半导体行业运用IPD?

半导体产业链具体包括上游半导体原材料与设备供应、中游半导体产品制造和下游应用。其中&#xff0c;半导体材料处于上游供应环节&#xff0c;材料品类繁多&#xff0c;按制造流程可细分为前端制造材料和后端封装材料。半导体设备&#xff0c;即在芯片制造和封测流程中应用到的…

github上传超过100M的大文件

当上传的工程中有超过100M的文件时&#xff0c;直接上传github会产生如下报错&#xff1a; remote: error: File retinaface-R50/R50-0000.params is 112.54 MB; this exceeds GitHubs file size limit of 100.00 MB! [remote rejected] master -> master (pre-receive ho…

一文了解Docker之网络模型

目录 1.Docker网络 1.1 Docker网络模型概述 1.2 Docker网络驱动程序 1.2.1 host模式 1.2.2 bridge模式 1.2.3 container模式 1.2.4 none模式 1.3 Docker网络命令示例 1.3.1 创建一个自定义网络 1.3.2 列出所有网络 1.3.3 连接容器到网络 1.3.4 断开容器与网络的连接…

ASO优化之海外应用的评分评论

应用评分评论是所有用户生成的反馈汇总&#xff0c;用1-5星等级来表示。这是用户在搜索应用程序是最先想到的事情&#xff0c;所以这对于应用商店优化很重要。 应用商店里有数以万计的应用程序可供使用&#xff0c;并且每天都会发布新的应用&#xff0c;所以为了在竞争激烈的应…

如何让小家电带电池设备快速充满电

如今随着这几年的USB-C PD适配器的普及&#xff0c;消费者手上的PD协议适配器越来越普遍&#xff0c;如何让微软surface 充电器线支持使用PD适配器快充呢&#xff1f;不妨加入一颗受电端PD协议取电芯片——LDR6015 就可以打造一根 PD电源线适配pro7/6/5/4/laptop/book/go Type…

【花雕】全国青少年机器人技术一级考试备考实操搭建手册8

随着科技的不断进步&#xff0c;机器人技术已经成为了一个重要的领域。在这个领域中&#xff0c;机械结构是机器人设计中至关重要的一部分&#xff0c;它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说&#xff0c;了解机械结构的基础知识&#xff0c;掌…

HarmonyOS极客松“上分秘籍”! 高手们顶峰相见!

HarmonyOS 极客马拉松2023 火热进行中&#xff0c;我们期待与各位开发者相聚一起&#xff0c;践行极客精神&#xff0c;创造无限可能&#xff01; 我们鼓励各位极客们自由组队&#xff0c;挥洒创意&#xff0c;用HarmonyOS 探索移动应用和服务的更多可能性&#xff01; 优秀的参…

ABB机器人中变量的3种存储类型使用时的区别

ABB机器人中变量的3种存储类型使用时的区别 ABB机器人中变量的存储类型有3种&#xff1a;变量VAR、可变量PERS、常量CONST&#xff0c;如下图所示&#xff0c; 如下图所示&#xff0c;声明一个VAR类型的变量&#xff0c;具体语法格式&#xff1a; 3种存储类型的具体区别如下…

vue3+ts 绘制流程图 vueflow 附代码及效果图

已完成渲染流程图&#xff0c;自定义模板内容(上下分级),自定义样式&#xff0c;新增节点addRandomNode&#xff0c;点击修改节点nodeClickHandler(从父组件传值) 官网&#xff1a;https://vueflow.dev/guide/node.html#node-template 文档比较复杂&#xff0c;很多想找的方法…

nohup命令解决SpringBoot/java -jar命令启动项目运行一段时间自动停止问题

问题描述&#xff1a; 在centos7上部署多个springcloud项目。出现了服务莫名其妙会挂掉一两个的问题&#xff0c;重新启动挂掉的服务之后又会出现其他服务挂掉的情况&#xff0c;查看启动日志也并没有发现有异常抛出。令人费解的是所有的服务都是通过nohup java -jar xxx.jar …

2020年国赛高教杯数学建模C题中小微企业的信贷决策解题全过程文档及程序

2020年国赛高教杯数学建模 C题 中小微企业的信贷决策 原题再现 在实际中&#xff0c;由于中小微企业规模相对较小&#xff0c;也缺少抵押资产&#xff0c;因此银行通常是依据信贷政策、企业的交易票据信息和上下游企业的影响力&#xff0c;向实力强、供求关系稳定的企业提供贷…

MAYA过山车动画

创建骨骼 把小车模型放入到控制器里 有点问题&#xff0c;先建立一个组在试&#xff0c;没问题了

docker框架02docker的安装

01.这次的docker是在centos版本下的Linux系统中安装的。 02.输入命令 01.先去卸载就得版本 02.安装工具包&#xff0c;和设置镜像仓库 03.由于网络的问题&#xff0c;访问国内的阿里云镜像 修改&#xff1a; 04.更新索引和安装社区版的docker 05.启动docker 06.用命令d…

nginx开启http2导致的服务验证码不可用问题

问题描述: 新搭建了一套开源的系统。通过nginx做了https反向代理后无法显示验证码。 具体报错&#xff1a; Uncaught TypeError: Cannot read properties of null (reading ‘property’) 点击报错后跳转到方法&#xff1a; xhr.getAllResponseHeaders() 问题就出在这个方法&…

leetcode 206.反转链表

⭐️ 往期相关文章 ✨链接&#xff1a;数据结构-手撕单链表代码详解。 ⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;反转链表 1️⃣ 代码&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* }…

html中input属性设置(合集)

html中input标签是常见的一个标签&#xff0c;下面由学习啦小编为大家整理了html中的input属性设置的相关知识&#xff0c;希望对大家有帮助! html中input属性设置总结 1、value 属性 value 属性规定输入字段的初始值&#xff1a; 实例 <form action""> F…

Day9操作系统基础——linux

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 linuxSSH黑客常用命令重难点 linux SSH 黑客常用命令 重难点 linux的相关操作指令

即时抽奖,即时开奖,技术上如何实现?(原来抽奖类的运营活动背后都是这么搞的)...

回答知识星球水友“self”提问。 需求抽象一下&#xff1a; &#xff08;1&#xff09;前100个人有资格&#xff0c;假设抽出N5个奖品&#xff1b; &#xff08;2&#xff09;报名就出奖&#xff0c;不用等100人到齐&#xff1b; &#xff08;3&#xff09;每个人概率一样&…

window debug ios webview

业务需求 在window上想要debug在ios的应用中的webview页面&#xff0c;毕竟页面是在安卓端和ios端都有webview的。安卓的页面使用edge的edge://inspect/#devices&#xff0c;手机开启调试模式就可以了。对于ios就没有办法&#xff0c;页面中已经使用了vconsole可以看到部分的信…