🇨🇳
阿臻的学习笔记
  • 🤖AI
    • 📑README
    • 🕒Scheduling
      • 一种JSSP的DRL环境
    • 📜Paper
      • 神经协同过滤
      • 非侵入信号深度学习
      • 肾透析移植机器学习
      • 心理学随机森林
      • P300数据学习
    • ⚒️Pytorch
      • 1.1数据基础
      • 1.2自动梯度
      • 1.3神经网络
      • 1.4模型实现
      • 2数据操作
    • 🛠️Ray+Gym
    • 📃Graph Neural
      • 图神经网络基础
      • Contrastive Multi-View Representation Learning on Graphs
    • 📽️Deep Learning
      • 《第一章》
      • 《第二章》
      • 《第三章》
      • 《第四章》
      • 台湾陈蕴侬视频2020
    • 🔨MXNet
      • 《第一章》《第二章》
      • 《第三章》
      • 《第四章》
      • 《第五章》
      • 《第六章》
      • 《第七章》
      • 《第八章》
      • 《第九章》
      • 《第十章》
  • 👨‍🏭Study
    • 📔Algorithm
      • Leetcode
        • 第一天(乱刷)
        • 第二天(栈)
        • 第三天(栈)
        • 第四天(堆)(贪心)
        • 第五天(贪心)
        • 第六天(贪心)
        • 第七天(排序)
        • 第八天(排序)
        • 第九天(排序)
        • 第十天(位运算)
        • 第十一天(位运算)
        • 第十二天(位运算)
        • 第十三天(位运算)
        • 第十四天(树)
        • 第十五天(树)
        • 第十六天(树)
        • 第十七天(树)
        • 第十八天(树)
        • 第十九天(树)
        • 第二十天(树)
        • 第二十一天(树)
        • 第二十二天(并查集)
        • 第二十三天(并查集)
        • 第二十四天(DFS)(图)
        • 第二十五天(图)(设计)
        • 第二十六天(拓扑)
        • 第二十七天(字典树)
        • 第二十八天(字典树)
        • 第二十九天(树状数组)(二叉搜索树)
        • 第三十天(递归)
        • 第三十一天(脑筋急转弯)
        • 第三十二天(脑筋急转弯)
        • 第三十三天(记忆化)
        • 第三十四天(队列)
        • 第三十五天(队列)
        • 第三十六天(极小化极大)
        • 第三十七天(几何)
        • 第三十八天(蓄水池抽样)
        • 第三十九天(数组)
        • 第四十天(数组)
        • 第四十一天(数组)
        • 第四十二天(数组)
        • 第四十三天(数组)
        • 第四十四天(数组)
        • 第四十五天(数组)
        • 第四十六天(数组)
      • Sort
        • 最小堆
        • 归并排序(merge_sort)
    • 📓Knowledge
      • python补码
    • 🔧Other
      • pythonic语法
      • Ubuntu备忘
由 GitBook 提供支持
在本页

这有帮助吗?

导出为 PDF
  1. Study
  2. Algorithm
  3. Leetcode

第二十一天(树)

今天完成题目:543,112,572,671,501,111,687 543:二叉树的直径

  • 直径等于左右子树的最大深度之和

  • 在dfs时候用left和right记录左右子树的最大深度

112:路径总和

  • 在遍历时候,目标总和不断减去遍历结点的值

  • 直到根结点等于目标总和剩余的值,说明存在

572:另一个树的子树

  • 暴力法:遍历所有结点,并逐个判断该结点是否为目标树

  • 套路法:引入两个空值 lNull 和 rNull,当一个节点的左孩子或者右孩子为空的时候,就插入这两个空值,这样 DFS 序列就唯一对应一棵树。

    • 通过dfs获得当前树的序列和目标树的序列

    • 通过KMP算法判断目标树的序列是否为当前树的子序列

    • KMP算法(什么时候背一下?):利用最大公共前后缀避免回溯

671:二叉树中第二小的结点

  • 该树特性:子节点为0或2,且父结点等于子结点中较小的一个==>根值最小

  • 若有子结点进递归,若左子结点等于根,则往该方向递归,并将其兄弟结点列入候选.

  • 从所有候选中选择较小的结点,且不等于根结点,就是第二小的.

501:二叉搜索树中的众数

  • 暴力法:遍历并建立字典,而后按值排序,前面若干个值相等的键为众数

  • 节省空间法:先中序遍历确定结果集的大小(众数的数量)和达到多少是众数,再申请空间后,再中序遍历将符合数量的数作为众数

111:二叉树的最小深度

  • 遍历到叶子结点并同时计算出此时深度,选择所有深度中最小的.

687:最长同值路径

  • 设置一个preVal记录父结点的值

  • 设置left和righ记录左右子树的最长同值路径(不绕弯的)

  • 如果当前结点的值等于preVal,则返回max(left,right)+1

  • 在每个非叶子结点,将left+right列入候选结果,选择最大值.

上一页第二十天(树)下一页第二十二天(并查集)

最后更新于4年前

这有帮助吗?

👨‍🏭
📔