使用Python3实现具有所有最深节点的最小子树

简介: 使用Python3实现具有所有最深节点的最小子树

正文


最近,在进行python的相关学习,正好利用leetcode平台来验证自己的学习情况,今天分享的题目是leetcode上面的865题:求解 具有所有最深节点的最小子树  


33.png34.png

根据上面题目的描述,我们可以将我们的问题分为下面的几个步骤:

  1. 求解当前树的深度
  2. 获取到相同深度上的树节点
  3. 利用求解2个公共的父节点进行迭代
  4. 当返回结果集仅仅有一个结果的时候,说明我们得到了最后的返回结果

下面是实现的代码:


# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    # 获取树的深度
    def getDeep(self, root: TreeNode) -> int:
        if root is None:
            return 0
        else:
            return max(self.getDeep(root.left), self.getDeep(root.right)) + 1
    # 获取结果
    def subtreeWithAllDeepest(self, root: TreeNode) -> TreeNode:
        deep = self.getDeep(root);
        if deep == 0:
            return None
        else:
            roots = [[] for x in range(deep)]
            self.dfs(root, roots, 0)
            res = roots[deep - 1]
            while len(res) != 1:
                p = res.pop()
                q = res.pop()
                common = self.commonNode(root, p, q)
                if common is not None:
                    res.append(common)
            return res[0]
    # 获取公共节点的方法
    def commonNode(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:
        if root is None or p.val == root.val or q.val == root.val:
            return root
        left = self.commonNode(root.left, p, q)
        right = self.commonNode(root.right, p, q)
        if left is None:
            return right
        if right is None:
            return left
        return root
    # 深度优先搜索树
    def dfs(self, root: TreeNode, roots: list, deep: int):
        if root is not None:
            roots[deep].append(root)
            self.dfs(root.left, roots, deep + 1)
            self.dfs(root.right, roots, deep + 1)
相关文章
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
33 4
|
14天前
|
Python
Python笔下那些神奇的树
Python笔下那些神奇的树
|
1月前
|
机器学习/深度学习 前端开发 数据挖掘
基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型
本文介绍了一个基于Python Django框架开发的房价数据分析平台,该平台集成了多种机器学习模型,包括线性回归、SVM、GBDT和BP神经网络,用于房价预测和市场分析,同时提供了前端大屏展示和后台数据管理功能。
|
1月前
|
Python
【Leetcode刷题Python】538. 把二叉搜索树转换为累加树
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
17 3
|
1月前
|
机器学习/深度学习 数据可视化 算法
决策树VS世界:掌握Python机器学习中的这棵树,决策从此不再迷茫
【8月更文挑战第2天】在数据驱动时代,决策树作为一种直观且易于解释的机器学习方法,因其强大的分类与回归能力备受青睐。本文介绍决策树的基础概念:通过属性测试划分数据,优化选择以提高预测准确度。使用Python的scikit-learn库,我们演示了如何加载鸢尾花数据集,构建并训练决策树模型,评估其准确性,以及利用`plot_tree`函数可视化决策过程,从而更好地理解模型的工作原理。掌握这些技能,你将在面对复杂决策时更加自信。
19 2
|
2月前
|
算法 数据处理 索引
告别低效搜索!Python中Trie树与Suffix Tree的实战应用秘籍!
【7月更文挑战第21天】探索Python中的字符串搜索效率提升:使用Trie树与Suffix Tree。Trie树优化单词查询,插入和删除,示例展示其插入与搜索功能。Suffix Tree,复杂但强大,适用于快速查找、LCP查询。安装[pysuffixtree](https://pypi.org/project/pysuffixtree/)库后,演示查找子串及最长公共后缀。两者在字符串处理中发挥关键作用,提升数据处理效率。**
34 1
|
2月前
|
存储 大数据 索引
解锁Python隐藏技能:构建高效后缀树Suffix Tree,处理大数据游刃有余!
【7月更文挑战第19天】Suffix Tree 概述:** 为高效处理字符串搜索、匹配和大数据分析,后缀树是一种优化数据结构,可快速检索后缀、执行最长公共后缀查询及字符串排序。Python中虽无内置实现,但可通过第三方库或自建代码构造。应用于字符串搜索、生物信息学等领域,提升大数据处理效率。
34 3
|
2月前
|
存储 开发者 Python
从理论到实践:Python中Trie树与Suffix Tree的完美结合,开启编程新篇章!
【7月更文挑战第19天】在编程实践中,Trie树和Suffix Tree优化了字符串处理。Trie树用于快速拼写检查,如在构建词库后,能高效判断单词是否存在。Suffix Tree则助力文本相似度检测,找寻共同子串。通过Python示例展示了Trie树插入和搜索方法,并指出Suffix Tree虽复杂但能提升性能。结合两者,实现复杂功能,展现数据结构的强大。
35 3
|
2月前
|
人工智能 算法 数据挖掘
高效文本处理新纪元:Python后缀树Suffix Tree,让数据分析更智能!
【7月更文挑战第20天】后缀树是文本处理的关键工具,它在Python中虽需第三方库支持(如pysuffixtree),但能高效执行搜索、重复内容检测等任务。应用于文本搜索、重复内容检测、生物信息学、文本压缩及智能推荐系统。随着AI和大数据发展,后缀树将在更多领域展现潜力,助力数据分析智能化和高效化。学习和利用后缀树,对于驾驭海量文本数据至关重要。**
36 1
下一篇
DDNS