算法刷题之二叉树

本专栏所有力扣题目的目录链接, 刷算法题目的顺序(由易到难/面试频率)/注意点/技巧, 以及思维导图源文件问题(持续更新中) 这篇文章为本专栏所有力扣题目提供目录链接,更加方便读者根据题型或面试频率进行阅读,此外也会介绍我在刷题过程中总结的刷算法题目的顺序/注意点/技巧,最后说下文中出现的思维导图源文件的问题. 我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题, 有兴趣的可以去 我的主页了解更多计算机学科的精品思维导图整理 本文可以转载,但请注明来处,觉得整理的不错的小伙伴可以点赞关注支持一下哦! 博客中思维导图的高清PDF版本,可关注公众号 一起学计算机 点击 资源获取 获得 一.所... 阅读详情

二叉树的遍历:

前序遍历: 根左右

中序遍历:左根右

后序遍历: 左右根

 

计算二叉树有多少个结点

int count(TreeNode root){
    if(root==null) return 0;
    return 1 + count(root.left)+count(root.right);
}

226. 翻转二叉树

难度简单645收藏分享切换为英文接收动态反馈

翻转一棵二叉树。

示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

备注:
这个问题是受到 Max Howell 的 原问题 启发的 :

谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        //base case
        if(root==NULL) return NULL;
        TreeNode *tmp = root->left;
        root->left = root->right;
        root->right = tmp;
        //让左右子树各自交换
        invertTree(root->left);
        invertTree(root->right);

        return root;
    }
};

 

116. 填充每个节点的下一个右侧节点指针

难度中等258收藏分享切换为英文接收动态反馈

给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。

初始状态下,所有 next 指针都被设置为 NULL。

 

示例:

输入:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":null,"right":null,"val":4},"next":null,"right":{"$id":"4","left":null,"next":null,"right":null,"val":5},"val":2},"next":null,"right":{"$id":"5","left":{"$id":"6","left":null,"next":null,"right":null,"val":6},"next":null,"right":{"$id":"7","left":null,"next":null,"right":null,"val":7},"val":3},"val":1}

输出:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":{"$id":"4","left":null,"next":{"$id":"5","left":null,"next":{"$id":"6","left":null,"next":null,"right":null,"val":7},"right":null,"val":6},"right":null,"val":5},"right":null,"val":4},"next":{"$id":"7","left":{"$ref":"5"},"next":null,"right":{"$ref":"6"},"val":3},"right":{"$ref":"4"},"val":2},"next":null,"right":{"$ref":"7"},"val":1}

解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。
/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* left;
    Node* right;
    Node* next;

    Node() : val(0), left(NULL), right(NULL), next(NULL) {}

    Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}

    Node(int _val, Node* _left, Node* _right, Node* _next)
        : val(_val), left(_left), right(_right), next(_next) {}
};
*/

class Solution {
public:
    Node* connect(Node* root) {
        if(root==NULL) return NULL;
        connectTwoNode(root->left,root->right);
        return root;
    }
    //定义: 输入两个节点,将其链接起来
    void connectTwoNode(Node* node1,Node* node2)
    {
        if(node1==NULL || node2==NULL) return;
        // 左右根
        node1->next = node2;
        //;链接相同父节点的两个节点
        connectTwoNode(node1->left,node1->right);
        connectTwoNode(node2->left,node2->right);
        connectTwoNode(node1->right,node2->left);
    }
};

114. 二叉树展开为链表

难度中等572收藏分享切换为英文接收动态反馈

给定一个二叉树,原地将它展开为一个单链表。

 

例如,给定二叉树

    1
   / \
  2   5
 / \   \
3   4   6

将其展开为:

1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6

通过次数85,514提交次数120,197

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    void flatten(TreeNode* root) {
        //base case
        if (root==nullptr) return;
        flatten(root->left);
        flatten(root->right);
        //后序遍历
        //1/ 左右子树已经被拉为一条链表
        TreeNode* left = root->left;
        TreeNode* right = root->right;

        //2.将左子树变为右子树
        root->left = nullptr;
        root->right = left;
        //3. 将原来的右子树接到当前右子树末端
        TreeNode* p = root;
        while(p->right !=nullptr)
        {
            p = p->right;
        } 
        p->right = right;
    }
};

参考链接:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247487126&idx=1&sn=4de13e66397bc35970963c5a1330ce18&chksm=9bd7f09eaca0798853c41fba05ad5fa958b31054eba18b69c785ae92f4bd8e4cc7a2179d7838&token=147394321&lang=zh_CN#rd 

 

 

算法面试题-----二叉树完整刷题总结 题目:输入一颗二叉树,返回他的深度(包括最大深度,最小深度) 解题:可以通过DFS,BFS两种方式进行计算 【剑指offer】面试题55 二叉树的深度 leetcode 104. Maximum Depth of Binary Tree (求二叉树的最大深度,DFS,BFS) leetcode 111. Minimum Depth of Binary Tree(求二叉树的最小深度,DFS,BFS)... 阅读详情

相关推荐

Algorithm:【算法进阶之路】之算法面试刷题集合—数据结构知识和算法刷题及其平台、问题为导向的十大类刷题算法(数组和字符串、链表、栈和队列、二叉树、堆、图、哈希表、排序和搜索、回溯算法、枚举/递

​ Algorithm:【算法进阶之路】之算法面试刷题集合—数据结构知识和算法刷题及其平台、问题为导向的十大类刷题算法(数组和字符串、链表、栈和队列、二叉树、堆、图、哈希表、排序和搜索、回溯算法、枚举/递归/分治/动态规划/贪心算法)总结 目录 相关文章 数据结构的最强学习路线之问题为导向的十大类刷题算法总结 一、学习相关的讲解与刷题平台 二、刷题集合 三、常见的十大类考试题型 相关文章 DSt:数据结构的简介、最强学习路线(逻辑结构【数组

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1906

Leetcode 每日一题——116. 填充每个节点的下一个右侧节点指针

116. 填充每个节点的下一个右侧节点指针 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 这道题拿到手第一反应就是用队列数据结构对二叉树进行广度优先搜索,所以最开始我就用C++实现了这个代码: /* // Definition for a Node. class Node { p

qq_41978896的博客 261

Win11专业版破解RDP限制:实现多用户远程桌面协同办公

本文详细介绍了如何在Windows 11专业版上破解RDP限制,实现多用户远程桌面协同办公。通过使用RDPWrap工具,用户可以绕过微软的授权限制,允许多个用户同时登录同一台电脑,提高硬件利用率和团队协作效率。文章包含详细的安装配置步骤、性能优化技巧及常见问题解决方案,适用于需要远程协作的办公场景。

weixin_33806300的博客 466

【二叉树】算法例题

从根到叶子节点路径 4->9->5 代表数字 495 从根到叶子节点路径 4->9->1 代表数字 491从根到叶子节点路径 4->0 代表数字 40 因此,数字总和 = 495 + 491 + 40 = 1026。的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。是指从根节点到最远叶子节点的最长路径上的节点数。(即逐层地,从左到右访问所有节点)。

QiAn的博客 1563

用5毫欧采样电阻实现高精度电流检测?数字可调电源控制板的硬件设计陷阱

本文深入探讨了在数字可调电源控制板设计中,如何利用5毫欧采样电阻实现高精度电流检测。从微小信号放大电路设计、采样电阻布局与热管理,到电源切换与电池管理电路优化,提供了全面的硬件设计解决方案和实用技巧,帮助工程师规避常见设计陷阱,提升系统性能。

wdx0123456的博客 1030

Linux中断子系统(二)—— 通用框架处理

1、数据结构分析 (1)中断描述符结构structirq_desc: 1)打开CONFIG_SPARSE_IRQ宏(中断编号不连续),中断描述符以radix- tree来组织,用户在初始化时进行动态分配,然后再插入radix-tree中; 2)关闭CONFIG_SPARSE_IRQ宏(中断编号连续),中断描述符以数组的 形式组织,并且已经分配好; 3)不管哪种形式,最终都可以通过linuxirq号来找到对应的中断描述符; (2)stru...

weixin_38428439的博客 4871

二叉树经典算法题目

思路:套用层序遍历的模板,然后记录当前层的最后一个node,和下一层的最后一个node.(如果知道当前层的最后一个node是哪一个,在把node的左右节点发放入队列的时候,下一层的最后一个node就能得出)。和上一题的不同的一点是,还要知道当前层的第一个节点是谁。1.遇到左子节点为空,右子节点不为空的情况,不满足 2.遇到第一个左子节点不为空,右子节点为空或者在右子节点都为空的时候,下面的节点子节点均为叶。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

qq_42575907的博客 2052

MATPOWER下载安装教程

将MATPOWER文件复制在C:\Program Files (x86)\MATLAB\R2016b\bin目录下。原来的窗口中多了很多文件路径,点击【保存】,再点击【关闭】选择所要添加的MATPOWER文件夹,点击【选择文件夹】二、将MATPOWER放在bin目录下。找到菜单栏的【设置路径】点击【添加并包含子文件】一、从官网下载后解压。

weixin_47365903的博客 2万+

二叉树算法题

后,我们了解了二叉树的相关概念和性质,并且实现了顺序结构二叉树——堆和链式结构二叉树,那么在本篇中我们就来试着解决一些二叉树相关的算法题,相信通过这些练习之后你会对二叉树有更深的理解。在之前二叉树的相关章节(

mljy.博客 2736

【详细】芯片设计全流程(包括每个流程需要用到的工具以及需要参与的工作人员)

一颗芯片的诞生经历了设计、制造和测试(分别对应集成电路产业链的设计业、制造业和封测业),而每一步都包含了复杂的步骤和流程。 图0-1 集成电路产业链 现在,我们重点介绍芯片设计的全流程以及每个流程需要用到的设计工具和需要参与的工作人员。 一、IC设计分类 首先对IC设计的分类做个介绍,如图1-1所示。 图1-1 IC设计分类 如图1-1所示,IC设计可以粗分为数字IC设计和射频/模拟IC设计,数字IC设计又可分为ASIC设计和FPGA/CPLD设计,此外还有一部分IC设计.

qq_36045093的博客 8万+

Matlab波动光光学系统

波动光学是一种研究光波传播过程的理论,按照其处理的信息类型不同,可以分为相干和非相干波动光学,相干波动光学可以用作特定光学系统的分析和设计,其主要依赖物理光学和电磁波的基本原理,以及光学干涉和衍射的经验方程式,其中光波传播过程是以复数形式表示的,包括振幅和相位两个方面。近年来光学技术得到了广泛的应用和发展,波动光光学系统是其中一种重要的光学系统,它主要是利用波动光学原理,通过计算机模拟实现各种光学系统的设计、分析和优化,可应用于大气光传输、光束整形、分析系统的衍射和干涉特性,包括利用。

weixin_50547796的博客 260

[算法刷题笔记]二叉树练习(1)二叉树的镜像

学习算法,还有一些知识的时候,有时候看书后以为自己懂了,结果做题就发现自己没什么思路,为此,博主决定坚持刷题,这里给大家推荐一个适合大家做题复习,准备面试的网站点此进入,里面还有大量的面经,大家可以在面试之前去看看我们可以看到里面根据不同知识层面分成对应的题库,算法也进行了对应的分类,十分的友好,接下来就开始今天的刷题之旅上面那两种方法是我能够想出来的思路,如果大家想要看看其他的思路的话,我们可以在牛客的题解上面看到其他人的思路和代码,大家具体的可以去看看,也可以在上面和大家一起交流探讨牛客。.......

梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 917

【乐企文件生成工程】乐企文件生成支持所有特定要素类型发票

【代码】【乐企文件】乐企文件生成最新更新!!!

九七的博客 850

【算法刷题】二叉树前中后序遍历(递归+迭代)详解

本文详细讲解二叉树的前中后序三种遍历方式,都包含迭代和递归两种写法,通俗易懂

在代码与逻辑的星河里,捡拾技术的微光 1379

17、扩展景深成像的瞳孔函数工程技术解析

本文详细解析了扩展景深成像的关键技术,包括基于焦距堆栈的数字处理方法、立方相位掩模的光学设计、对数非球面透镜的应用以及旋转点扩散函数的深度编码功能。通过实验验证和实际应用分析,展示了这些技术在显微镜成像、工业检测和医疗影像中的广泛用途及优势。同时探讨了未来发展方向,如智能算法优化、新型光学材料和多模态成像技术,为相关领域的技术创新提供了参考。

y2z3a4b5c的博客 168

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LeetCode算法刷题——二叉树

LeetCode算法刷题by Python——二叉树一、重建二叉树 今天我们来学习如何构建二叉树,话不多说,直接上题。 一、重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例 1: Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] Output: [3,9,20,null,null,15,7] 示例 2: Input: preorder = [-1

qq_38958912的博客 1548

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

算法刷题之二叉树的镜像

采用递归的思想,将二叉树的左子节点和右子节点进行交换。 package tree; public class TreeMirror { /** 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 */ class TreeNode

景兄弟的博客 400

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

二叉树高频习题:突破算法瓶颈的 “利刃”,刷题人必入的 “黄金题库”!(第14讲)

则该⼆叉树中的叶⼦结点数为( )A.不存在这样的二叉树 B.200 C.198 D.199解答:叶子结点数为199+1=200,故选B.在具有2n个结点的完全⼆叉树中,叶子结点个数为( ):设二叉树中度为0的结点个数为a,度为1的节点个数为b,度为3的结点个数为c,则总的结点个数:2n=a+b+c,根据题意要求叶子结点个数,就是要求c,a=2n-b-c,由二叉树性质可知,c=a-1,所以a=2n-b-a+1,即2a=2n-b+1。此外,(不可能是2)。

2402_87374751的博客 1237

[算法刷题笔记]二叉树练习(2) 对称二叉树有关的练习_给定两个根结点分别为root1 和root2 二又树,请判断这两棵树是否完全相同数据范围 (1)

学习算法,还有一些知识的时候,有时候看书后以为自己懂了,结果做题就发现自己没什么思路,为此,博主决定坚持刷题,这里给大家推荐一个适合大家做题复习,准备面试的网站,里面还有大量的面经,大家可以在面试之前去看看我们可以看到里面根据不同知识层面分成对应的题库,算法也进行了对应的分类,十分的友好,接下来就开始今天的刷题之旅。

2401_84159688的博客 351

算法刷题-7.二叉树(1刷)

int val;二叉树的题最重要的就是确定遍历顺序。一定要思考清楚:前中后序遍历,还是层序遍历。递归三部曲层序遍历法 和迭代法都有模板,解题时优先使用模板。解题思路–分析遍历顺序,套模板。【了解】红黑树就是一种二叉平衡搜索树,这两个树不是独立的,所以C++中map、multimap、set、multiset的底层实现机制是二叉平衡搜索树,再具体一点是红黑树。

qq_53682472的博客 238

算法题到底该怎么刷?高效刷题方法

算法题到底该怎么刷?高效刷题方法

weixin_41171614的博客 4102

算法刷题总结:二叉树

知识点 对于二叉树,包含一些性质: 在二叉树中,第iii层上至多有2i−12^{i-1}2i−1个节点(i≥1i\ge 1i≥1) 深度为kkk的二叉树至多有2k−12^{k-1}2k−1个节点(k≥1k\ge 1k≥1) 对一棵二叉树,如果叶子节点的个数为n0n_0n0​,度为2的节点个数为n2n_2n2​,则n0=n2+1n_0=n_2+1n0​=n2​+1 具有nnn个节点的完全二叉树的深度为⌊log⁡2n\log_2nlog2​n⌋+1 二叉树遍历 前序遍历:先访问根节点,再前序遍历左子树,再前序遍

weixin_43609115的博客 327

【算法刷题】翻转二叉树

本文为个人解题思路整理,水平有限,有问题欢迎交流 概览 一个简单的递归而已,入门级算法题,其实没啥记录的价值,写出来是因为看到个有趣的东西,莫名可爱 难度:入门 核心知识点:递归 题目来源 力扣:https://leetcode-cn.com/problems/invert-binary-tree/ 题目内容 翻转一颗二叉树 样例 数据源 4 / \ 2 7 / \ / \ 1 3 6 9 输出 4 / \ 7 .

路远不知归 350

labuladong 刷题之 二叉树系列算法

如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。因为我们需要知道一个节点的左右子树的深度才可以知道它的直径长度,所以我们放在后序位置。A:因为前面说了,前序位置是进入一个节点的时候,后序位置是离开一个节点的时候,中序位置的代码在一个二叉树节点左子树都遍历完,即将开始遍历右子树的时候执行。空间复杂度:O(n) 因为每个节点最多遍历一次,,每个节点在整棵树的结构中。如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值。

Xyyyy12333的博客 701

算法刷题之二叉树的深度

采用递归的思想,依次比较每个节点的左子树和右子树的深度,然后返回左右子节点的最大深度(+1是算上顶点的值)。 package tree; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class TreeDeepth {

景兄弟的博客 278
上一篇: leetcode之括号问题
下一篇: 二叉树刷题2
eilot_c
博客等级 码龄11年 902粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值