@ 代码随想录算法训练营第4周(C语言)|Day21(二叉树)

news/2024/7/20 21:29:32 标签: 算法, c语言, 深度优先

@ 代码随想录算法训练营第4周(C语言)|Day21(二叉树)

Day21、二叉树(包含题目 ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先 )

530.二叉搜索树的最小绝对差

题目描述

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

题目解答

 struct TreeNode*pre;
 void absnode(struct TreeNode*root,int*result){
     if(root==NULL){
         return;
     }
     absnode(root->left,result);
    if(pre!=NULL){
        *result=(*result)>(root->val-pre->val)?(root->val-pre->val):(*result);
    }
    pre=root;

     absnode(root->right,result);
 }
int getMinimumDifference(struct TreeNode* root) {
    int result=INT_MAX;
    pre=NULL;
    
    absnode(root,&result);
    return result;
}

题目总结

搜索二叉树对应中序左中右。

501.二叉搜索树中的众数

题目描述

给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。

题目解答

 int pre;
 int count;
 int maxcount;
 int*res;
 int resnum;
 void dfs(struct TreeNode* root){
     if(root==NULL){
         return;
     }
     dfs(root->left);
    if(pre==root->val){
        count++;
    }else{
        count=1;
        pre=root->val;
    }
    
    if(count==maxcount){
        res[resnum++]=pre;
    }
    if(count>maxcount){
        resnum=0;
        res[resnum++]=pre;
        maxcount=count;
    }

     dfs(root->right);
 }
int* findMode(struct TreeNode* root, int* returnSize) {
    int*res=(int*)malloc(sizeof(int)*4001);
    pre=count=maxcount=resnum=0;
    dfs(root);
    *returnSize=resnum;
    return res;
}

题目总结

各个参数有不同的意义。

236. 二叉树的最近公共祖先

题目描述

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

题目解答

struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {
    if(root==NULL){
        return NULL;
    }
    //应该是或关系
    if(root==p||root==q){
        return root;
    }
    struct TreeNode*left=lowestCommonAncestor(root->left,p,q);
    struct TreeNode*right=lowestCommonAncestor(root->right,p,q);
    if(left!=NULL&&right!=NULL){
        return root;
    }
    if(left!=NULL&&right==NULL){
        return left;
    }else if(right!=NULL&&left==NULL){
        return right;
    }else{
        return NULL;
    }
}

题目总结

后序遍历(左右中)就是天然的回溯过程,可以根据左右子树的返回值,来处理中节点的逻辑,后续回溯。


http://www.niftyadmin.cn/n/5392465.html

相关文章

多线程架构

多线程架构是一种利用多核或多处理器资源来提高程序执行效率的技术。它允许多个线程同时运行,共享处理器的资源,从而提高程序的并行性和吞吐量。 多线程架构可以分为以下几种类型: 用户态线程(User-Mode Threads,简称…

Ansible 简介安装

1、概念介绍 Ansible 是一款为类 Unix 系统开发的自由开源的配置和自动化工具。由 Red Hat 公司使用 python 研发,类似于 saltstack 和 Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。它使用 SSH 来和节点进行通信。Ansible 基于 Py…

什么是上网行为审计软件?上网行为审计系统都有什么功能?

上网行为审计软件是指对网络进行监控和管理的一种软件,可以对员工或学生的上网行为进行记录、审计和分析,以便更好地管理网络资源,提高网络安全性和效率。 上网行为审计软件可以帮助企业或学校实现以下功能: 1. 监控上网行为 可…

Vue3 exceljs库实现前端导入导出Excel

前言 需求场景 最近在开发项目时需要批量导入和导出Excel数据,在实现这个需求时,我们既可以在前端完成数据解析和文件生成工作,也可以通过前端发起导入以及导出请求后,后端实现解析文件流解析文件内容以及生成文件并提供下载链接…

jitsi meet 视频会议录制方案

前言 我们都知道视频会议录制是个很常见的功能,但是由于jitsi meet使用jibri进行录制很耗资源,所以类似腾讯会议这种前端录制,不占用服务器资源,也是一种可选项。 前端录制 前端录制的特点; ●目前此录制仅支持最大 1GB&#…

數據集成平台:datax將MySQL數據同步到hive(全部列和指定列)

1.數據集成平台:將MySQL數據同步到hive(全部和指定列) python環境:2.7版本py腳本 傳參: source_database:數據庫 source_table:表 source_columns:列 source_splitPk:sp…

OPPO公布全新AI战略,AI 手机时代再提速

2024年2月20日,深圳——今日OPPO 举办 AI 战略发布会,分享新一代 AI 手机的四大能力特征,展望由AI驱动的手机全栈革新和生态重构的趋势,并发布由OPPO AI 超级智能体和 AI Pro 智能体开发平台组成的OPPO 1N 智能体生态战略&#xf…

Vue3路由组件练习

Vue3 路由组件练习 演示效果代码分析 安装 vue-router创建路由文件创建路由实例使用 router-link 组件导航 代码实现 index.js 文件App 文件 1. 演示效果 2. 代码分析 2.1. 安装 vue-router 命令:npm i vue-router 应用插件:Vue.use(VueRouter) 2.2…