当前位置: 首页 > news >正文

leetcode尊享面试——二叉树(python)

250.统计同值子树

使用dfs深度搜索,同值子树,要满足三个条件:

对于当前节点node,他的左子树血脉纯净(为同值子树),右子树血脉纯净(为同值子树),node的值等于左右子树节点的值。

全是if判断,推理!!!

class Solution:def countUnivalSubtrees(self, root: Optional[TreeNode]) -> int:n, b = self.dfs(root)return ndef dfs(self, root):if not root: return 0, Truen = 0b = Truen1, b1 = self.dfs(root.left)n2, b2 = self.dfs(root.right)n = n1 + n2if not b1 or not b2:b = Falseif root.left and root.left.val != root.val:b = Falseif root.right and root.right.val != root.val:b = Falseif b: n += 1return n, b

1120.子树的最大平均值

使用dfs, 返回以root为根的所以节点的总和,节点数量。

没有任何技巧,全是感情!!!

class Solution:def __init__(self):self.m = 0def maximumAverageSubtree(self, root: Optional[TreeNode]) -> float:self.dfs(root)return self.mdef dfs(self, root):# 返回以root为根的所以节点的总和,节点数量if not root: return 0, 0s1, c1 = self.dfs(root.left)s2, c2 = self.dfs(root.right)s = s1 + s2 + root.valc = c1 + c2 + 1self.m = max(self.m, s/c)return s, c

545.二叉树的边界

 可以把题目分成三个问题,使用三个dfs解决,可以发现左边界和右边界很相似,dfs传入一个idx判断是先从左走还是先从右走,另外题目说:根节点 不是 叶节点。但是数据中存在只有一个节点的情况需要注意。

class Solution:def __init__(self):self.leaf = []def boundaryOfBinaryTree(self, root: Optional[TreeNode]) -> List[int]:if not root.left and not root.right: return [root.val]ans = []if root.left:l = self.find_ls(root, 0)ans += lelse:ans = [root.val]self.find_leaf(root)ans += self.leafif root.right:r = self.find_ls(root, 1)ans += r[::-1]ans.pop()return ansdef find_ls(self, root, idx):ans = [root.val]if idx == 1:root.left, root.right = root.right, root.leftif root.left:ans += self.find_ls(root.left, idx)elif root.right:ans += self.find_ls(root.right, idx)else:return []return ansdef find_leaf(self, root):if root.left:self.find_leaf(root.left)if root.right:self.find_leaf(root.right)if not root.left and not root.right:self.leaf.append(root.val)

366.寻找二叉树的叶子节点

任然使用dfs深度搜索,记录每一层的位置,然后在ans相应位置中插入

class Solution:def __init__(self):self.length = 0self.ans = []def findLeaves(self, root: Optional[TreeNode]) -> List[List[int]]:self.dfs(root)return self.ansdef dfs(self, root):if not root: return 0n1 = self.dfs(root.left)n2 = self.dfs(root.right)n = max(n1, n2)if self.length - 1 < n:self.length += 1self.ans.append([])self.ans[n].append(root.val)return n + 1

还能补充知识吗!!!我的大脑🧠

http://www.lryc.cn/news/345600.html

相关文章:

  • macbookpro 安装linux mint 无线wifi无法连接 解决方案
  • 抖音小店如此内卷,现在还值得投入吗?还能赚到钱吗?
  • Java基础知识(11)
  • iOS——SDWebImage源码学习
  • 信创基础软件之中间件
  • 在Ubuntu linux操作系统上操作MySQL数据库常用的命令
  • 前端科举八股文-JAVASCRIPT篇
  • Docker私有仓库与Harbor部署使用
  • Linux的iptables防火墙基础介绍
  • deepspeed+transformers模型微调
  • 无人机摄影测量数据处理、三维建模及在土方量计算中的应用
  • 《ESP8266通信指南》15-MQTT连接、订阅MQTT主题并打印消息(基于Lua|适合新手|非常简单)
  • LeetCode:两数之和
  • CSDN我的创作纪念日128天||不忘初心|努力上进|勇往直前
  • MySQL数据库中的浮点类型和高精度类型有什么区别?为什么不推荐使用浮点类型?
  • C++ 抽象与封装
  • antV X6的简要使用教程
  • 【LLM 论文】Step-Back Prompting:先解决更高层次的问题来提高 LLM 推理能力
  • Java——接口的补充
  • word转pdf的java实现(documents4j)
  • 基于K8S构建Jenkins持续集成平台
  • PHPStudy 访问网页 403 Forbidden禁止访问
  • 热爱电子值得做的电子制作实验
  • .class文件启动过程以及文件内容结构讲解
  • 解锁楼宇自动化新维度西门子Insight+BACnet IP I/O控制器
  • 2024.05.10作业
  • 基于POSIX标准库的读者-写者问题的简单实现
  • 重生我是嵌入式大能之串口调试UART
  • 【智能优化算法】蜜獾优化算法(Honey Badger Algorithm,HBA)
  • 【算法与数据结构】数组