首页 > 其他分享 >20天 hot 100 速通计划-day08

20天 hot 100 速通计划-day08

时间:2023-08-14 19:12:58浏览次数:48  
标签:day08 20 速通 right 二叉树 return root 节点 left

二叉树

94. 二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历

示例 1:

img

输入:root = [1,null,2,3]
输出:[1,3,2]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

提示:

  • 树中节点数目在范围 [0, 100]
  • -100 <= Node.val <= 100

递归三部曲

  1. 参返分析
  2. 终止条件
  3. 单层逻辑
class Solution {
	vector<int> res;
public:
    //参返分析:需要输入一个待遍历的结点,没有返回值
    //终止条件:访问到空节点
    //单层逻辑:访问左子树,输出当前节点值,访问右子树
    void tranversal(TreeNode* root){
        if(root == nullptr){
            return;
        }
        tranversal(root->left);
        res.push_back(root->val);
        tranversal(root->right);
    }
    vector<int> inorderTraversal(TreeNode* root) {
        tranversal(root);
        return res;
    }
};

104. 二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:

输入:root = [1,null,2]
输出:2

提示:

  • 树中节点的数量在 [0, 104] 区间内。
  • -100 <= Node.val <= 100

递归三部曲

  1. 参返分析
  2. 终止条件
  3. 单层逻辑
class Solution {
public:
    //参返分析:输入根节点,返回高度
    //终止条件:当前节点为空
    //3.单层逻辑
    //左右子树最大值 + 1;
    int getDepth(TreeNode* root,int height){
        if(root == nullptr){
            return 0;
        }
        int left = getDepth(root->left, height);
        int right = getDepth(root->right, height);
        height = max(left, right)+1;
        return height;
    }
    int maxDepth(TreeNode* root) {
        int height = 0;
        int res = getDepth(root,height);
        return res;
    }
};

226. 翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

示例 1:

img

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:

img

输入:root = [2,1,3]
输出:[2,3,1]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目范围在 [0, 100]
  • -100 <= Node.val <= 100
class Solution {
public:
    //参返分析:输入当前根节点,无需返回值
    //终止条件:当前节点为空节点
    //单层逻辑:交换左右孩子
    void func(TreeNode* root){
        if(root == nullptr){
            return;
        }
        TreeNode* tmp = root->left;
        root->left = root->right;
        root->right = tmp;
        func(root->left);
        func(root->right);
    }
    TreeNode* invertTree(TreeNode* root) {
        func(root);
        return root;
    }
};

101. 对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

img

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

img

输入:root = [1,2,2,null,3,null,3]
输出:false

提示:

  • 树中节点数目在范围 [1, 1000]
  • -100 <= Node.val <= 100
class Solution {
public:
    // 辅助函数,判断两个树是否镜像对称
  	// 参返分析:输入两个节点,返回判断结果
  	// 终止条件:两个节点都为空
  	// 单层逻辑:左右子树值相等且左子树的左子树与右子树的右子树对称,左子树的右子树与右子树的左子树对称
    bool isMirror(TreeNode* left, TreeNode* right) {
        // 终止条件:两个节点都为空,返回true
        if (left == nullptr && right == nullptr) {
            return true;
        }
        // 递归判断:左右子树值相等且左子树的左子树与右子树的右子树对称,左子树的右子树与右子树的左子树对称
        if (left != nullptr && right != nullptr && left->val == right->val) {
            return isMirror(left->left, right->right) && isMirror(left->right, right->left);
        }
        // 其他情况都不对称,返回false
        return false;
    }

    bool isSymmetric(TreeNode* root) {
        // 特殊情况:根节点为空,直接返回true
        if (root == nullptr) {
            return true;
        }
        // 调用辅助函数判断左右子树是否镜像对称
        return isMirror(root->left, root->right);
    }
};

543. 二叉树的直径

给你一棵二叉树的根节点,返回该树的 直径

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root

两节点之间路径的 长度 由它们之间边数表示。

示例 1:

img

输入:root = [1,2,3,4,5]
输出:3
解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。

示例 2:

输入:root = [1,2]
输出:1

提示:

  • 树中节点数目在范围 [1, 104]
  • -100 <= Node.val <= 100

所谓直径,就是把最长的链表拉直的长度

可以看做求二叉树最大深度的变体

class Solution {
public:
    int maxDiameter = 0;
    //整体上还是求二叉树最大深度的函数,只不过多加了一条更新最大直径的语句
    int maxDepth(TreeNode* node) {
        if (node == NULL)
            return 0;
        int leftDepth = maxDepth(node->left);
        int rightDepth = maxDepth(node->right);
        //注意:最大直径指的是边数,而边数= 节点数 -1 = (leftDepth + rightDepth + 1) - 1 = left + right
        maxDiameter = max(maxDiameter, leftDepth + rightDepth);
        return max(leftDepth, rightDepth) + 1;
    }
    int diameterOfBinaryTree(TreeNode* root) {
        if (root == NULL)
            return 0;
        maxDepth(root);
        return maxDiameter;
    }
};

标签:day08,20,速通,right,二叉树,return,root,节点,left
From: https://www.cnblogs.com/ba11ooner/p/17629492.html

相关文章

  • 云原生周刊:Kubernetes v1.28 新特性一览 | 2023.8.14
    推荐一个GitHub仓库:Fast-Kubernetes。Fast-Kubernetes是一个涵盖了Kubernetes的实验室(LABs)的仓库。它提供了关于Kubernetes的各种主题和组件的详细内容,包括Kubectl、Pod、Deployment、Service、ConfigMap、Volume、PV、PVC、Daemonset、Secret、Affinity、Taint-Tolerati......
  • 【专题】2023年Z世代新母婴人群消费洞察报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=33430原文出处:拓端数据部落公众号我国出生人口数量在2022年为956万人,比去年减少了10%。多种因素影响了这一趋势,包括育龄人口减少、生育观念改变以及婚育年龄推迟。然而,与此同时,由于母婴人群消费水平不断提高,以及精细化喂养逐渐成为育儿的主流方式,......
  • Nep2023的wp
    0x00闲言碎语2023.8.14记录11-13的紧张刺激。46名结赛。非常高兴能够参加NepCTF2023,以一个初出茅庐的新人的身份参加。ctf的乐趣在于学习和探索,同时我也有想证明自己的成分。连续两天的凌晨四点睡觉,让我体会着比赛的魅力。每当我纠结一道题(code是第一晚,陌生的语言和login是第......
  • 高频SQL 50题(基础版): 进店却未进行过交易的顾客 | 2023-08-14
    问题表:Visits+-------------+---------+|ColumnName|Type|+-------------+---------+|visit_id|int||customer_id|int|+-------------+---------+visit_id是该表中具有唯一值的列。该表包含有关光临过购物中心的顾客的信息。表:Transact......
  • 漏洞复现报告:CVE-2020-2551 IIOP反序列化漏洞
    1.漏洞描述: 2020年1月15日,Oracle发布了一系列的安全补丁,其中OracleWebLogicServer产品有高危漏洞,漏洞编号CVE-2020-2551,CVSS评分9.8分,漏洞利用难度低,可基于IIOP协议执行远程代码。Weblogic是一个服务器,可以做web服务器也可以做应用服务器WebLogic是美国Oracle公司出品的......
  • [YsOI2023] 广度优先遍历 逆向输出路径(分层建树拓扑序. LCA)
    今天的模板测试是无向图上的广度优先遍历,【数据删除】马上写好了代码:1#include<cstdio>2#include<cstring>3#include<iostream>4#include<algorithm>5#include<vector>6#include<queue>7usingnamespacestd;8constintmaxn=100005;......
  • 「题解注释」P3345 [ZJOI2015] 幻想乡战略游戏
    题解P3345【[ZJOI2015]幻想乡战略游戏】-Baka'sBlog-洛谷博客(luogu.org)耗时:半个下午代码注释:#include<bits/stdc++.h>typedeflonglongLL;inlineintrd(){ inta=1,b=0;charc=getchar(); while(!isdigit(c))a=c=='-'?0:1,c=getcha......
  • DS CATIA Composer R2023(3D辅助设计软件) HF3中文永久使用
    DSCATIAComposerR2023是一款功能强大的3D辅助设计软件。点击获取DSCATIAComposerR2023 下面是对DSCATIAComposerR2023的800字详细介绍:DSCATIAComposerR2023是由达索系统(DassaultSystèmes)开发的一款专业的3D辅助设计软件。它为用户提供了创新的工具和功能,旨在......
  • VTK 实例20:用vtkImageViewer2显示三维医学图像mhd的某个切面
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkSmartPointer.h>6#include<vtkImageViewer2.h>7#include<vtkRenderWindow.h>8#include<......
  • 【专题】2022母婴行业洞察报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=33430我国出生人口数量在2022年为956万人,比去年减少了10%。多种因素影响了这一趋势,包括育龄人口减少、生育观念改变以及婚育年龄推迟。然而,与此同时,由于母婴人群消费水平不断提高,以及精细化喂养逐渐成为育儿的主流方式,我国母婴市场产业规模持续增长......