二叉树刷题专练(一)

news/2024/11/24 10:05:24/

文章目录

  • 前言
  • 一、单值二叉树
    • 1.题目介绍
    • 2.思路
    • 3.代码解析
  • 二、二叉树的最大深度
    • 1.题目介绍
    • 2.思路
    • 3.代码
  • 三、翻转二叉树
    • 1.题目介绍
    • 2.思路
    • 3.代码
  • 总结


前言


在这里插入图片描述

继承以往刷题训练营的风格,文章会采用循序渐进的过程,本篇是二叉树的刷题训练营,所以不会讲解二叉树的基本知识,如果对于二叉树的基础知识不了解的同学需要自行了解二叉树的基础知识(例如前序,中序,后序等)

一、单值二叉树

1.题目介绍

题目在力扣965. 单值二叉树
在这里插入图片描述

2.思路

我们如果想要判断整棵树是不是单值,我们就将每一个节点都比较一下就行了,就是遍历
因为递归的思路就是分治思想,我们可以拿一个小数来说,我们将小数的根的值与其非空的子节点进行比较,如果相等,那就返回ture,放着返回false如下图
在这里插入图片描述
所以
1.如果节点为root为空,即返回true
2.当左节点不为空时,左节点不等于root时返回false
3.当右节点不为空时,右节点不等于root时返回false
然后进行遍历就行,只要碰到false就返回false

3.代码解析

bool isUnivalTree(struct TreeNode* root){if(root==NULL){return true;}if(root->left&&root->left->val!=root->val){return false;}if(root->right&&root->right->val!=root->val){return false;}return isUnivalTree(root->left)&&isUnivalTree(root->right);
}

在这里插入图片描述

二、二叉树的最大深度

1.题目介绍

104. 二叉树的最大深度
在这里插入图片描述

2.思路

分治算法,我们要求一颗树的深度,就像要求一个楼的某一层的高度,我们这层楼的高度等于前一·层的高度加一,同时,这是二叉树,我们是求最大的,所以我们比较左右子树的层数,在大的上加一就是这课树的高度

3.代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/int maxDepth(struct TreeNode* root){if(root==NULL){return 0;}int left=maxDepth(root->left);int right=maxDepth(root->right);return left>right?left+1:right+1;
}

三、翻转二叉树

1.题目介绍

226. 翻转二叉树
在这里插入图片描述

2.思路

我们盯着一颗小树看,我们是不是只需要交换左子树和右子树就可以在这里插入图片描述
放在整课数上来看,无非就是一个遍历

3.代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/struct TreeNode* invertTree(struct TreeNode* root){if(root==NULL){return NULL;}struct TreeNode*temp=root->right;root->right=root->left;root->left=temp;invertTree(root->right);invertTree(root->left);return root;
}

总结

如果你在有基础的前提下做了上面的题目,是不是越来越炉火纯青了?对于递归有了更加深刻的理解了?后面我将会进一步讲解二叉树的题


http://www.ppmy.cn/news/36696.html

相关文章

【创作赢红包】[BJDCTF2020]The mystery of ip

目录 信息收集 模块注入 判断类型 SSTI 信息收集 <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and mediaqueries --><!-- WARNING: Respond.js doesnt work if you view the page via file://--><!--[if lt IE 9]><script src&qu…

Mybatis+Mysql 实现向下递归查询

介绍 说到递归查询&#xff0c;大家可以想到的技术实现方式主要如下几种&#xff1a; 1、各种主流应用开发语言本身通过算法实现 2、各种数据库引擎自身提供的算法实现 本文提到主要是针对第二种和第一种的结合 主要技术栈 1、ORM&#xff1a;Mybatis 2、DB&#xff1a;MyS…

服务器版RstudioServer安装与配置详细教程

Docker部署Rstudio server 背景&#xff1a;如果您想在服务器上运行RstudioServer&#xff0c;可以按照如下方法进行操作&#xff0c;笔者测试时使用腾讯云服务器&#xff08;系统centos7&#xff09;&#xff0c;需要在管理员权限下运行 Rstudio 官方提供了使用不同 R 版本的 …

Apache Camel

目录儿一、简介二、核心总结一、简介 Camel is an Open Source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data. Camel 是一个开源的集成框架&#xff0c;能够让开发者快速、轻松地整合/集成不同的应…

华为OD机试用java实现 -【最多获得的短信条数】(2023-Q1 新题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:最多获得的短信条数 题目 某…

张文海教授课题组在国际高水平期刊《Cerebral Cortex》发表研究成果

调节悲伤情绪对于维持伴侣间的浪漫关系至关重要。人际情绪调节策略包括情感参与&#xff08;AE&#xff09;和认知参与&#xff08;CE&#xff09;&#xff0c;这两种策略在浪漫关系中效用如何&#xff1f;它们是如何通过情感纽带调节伴侣情绪的&#xff1f;其背后的脑际神经互…

将 ChatGPT 与 实时聊天插件结合的终极指南

人工智能技术是聊天营销人员的福音&#xff0c;而ChatGPT是这场革命的突破性新成员。人工智能工具可以帮助显着改善您的营销工作&#xff0c;从创建更多自定义对话到节省客户支持响应的大量时间。事实上&#xff0c;你可以通过几个简单的步骤将ChatGPT与您的实时聊天插件结合起…

信号覆盖 蓝桥杯模拟

信号覆盖&#xff08;暴力模拟&#xff09; ❓️问题描述 小蓝负责一块区域的信号塔安装&#xff0c;整块区域是一个长方形区域&#xff0c;建立坐标轴后&#xff0c;西南角坐标为(0, 0)&#xff0c; 东南角坐标为(W, 0)&#xff0c; 西北角坐标为(0, H)&#xff0c; 东北角坐标…