🇨🇳
阿臻的学习笔记
  • 🤖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

第十七天(树)

今天完成题目:1628,1584,965,669 1628:二叉树的最近祖先

  • 一开始使用了层次遍历,较为麻烦,需要填满所有空缺的地方,超出了时间限制

  • 而后改成深度遍历,AC

  • 在递归中,可以使用p_list.copy()来浅拷贝一个数据

    def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:
        if not root or root == p or root == q: return root # 找到p或q
        left = self.lowestCommonAncestor(root.left, p, q) # pq谁先找到就返回谁
        right = self.lowestCommonAncestor(root.right, p, q) #pq谁先找到就先返回谁
        if not left: return right # 若pq都在右边,那么最先找到right的就是最近公共祖先
        if not right: return left # 若pq都在左边,那么最先找到left的就是最近公共祖先
        return root # 若pq在左右两边都有,那么root就是结果

1584:从上到下打印二叉树

  • 利用队列的FIFO特性层序遍历二叉树

  • 在每一层利用一个for循环实现一层的遍历,并临时存储下一层

  • 队列可以是collections包的deque双向队列[pop()和popleft(),append()和appendleft()]

  • 也可以是queue包的Queue[put()入队和get()出队].

1627:二叉搜索树的最近公共祖先

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        # 或p,q在同一侧,p,q某一个先遍历到,root.val==p.val or root.val==q.val
        if not root or root == p or root == q: return root
        if root.val>p.val and root.val>q.val: # p,q在左子树中
            return self.lowestCommonAncestor(root.left,p,q)
        elif root.val<p.val and root.val<q.val: # p,q在右子树中
            return self.lowestCommonAncestor(root.right,p,q)
        else: # p,q在左右子树中,root为结果
            return root 

965:单值二叉树

  • 通过栈迭代遍历所有数值,只要有一个不同,返回false即可

669:修剪二叉树

  • 先找出范围内的树

  • 而后将这些数按顺序插入二叉搜索树中(不需要高度平衡)

上一页第十六天(树)下一页第十八天(树)

最后更新于3年前

这有帮助吗?

👨‍🏭
📔