使用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)
相关文章
|
19天前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
19天前
|
机器学习/深度学习 Python
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-4
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
13天前
|
机器学习/深度学习 数据采集 算法
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
|
2天前
|
JSON 数据可视化 Shell
数据结构可视化 Graphviz在Python中的使用 [树的可视化]
数据结构可视化 Graphviz在Python中的使用 [树的可视化]
9 0
|
6天前
|
SQL 分布式计算 数据可视化
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
|
11天前
|
机器学习/深度学习 算法 数据可视化
【Python机器学习专栏】决策树算法的实现与解释
【4月更文挑战第30天】本文探讨了决策树算法,一种流行的监督学习方法,用于分类和回归。文章阐述了决策树的基本原理,其中内部节点代表特征判断,分支表示判断结果,叶节点代表类别。信息增益等标准用于衡量特征重要性。通过Python的scikit-learn库展示了构建鸢尾花数据集分类器的示例,包括训练、预测、评估和可视化决策树。最后,讨论了模型解释和特征重要性评估在优化中的作用。
|
16天前
|
机器学习/深度学习 算法 Python
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享(下)
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
16天前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享(上)
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
18天前
|
机器学习/深度学习 存储 数据可视化
数据分享|Python在Scikit-Learn可视化随机森林中的决策树分析房价数据
数据分享|Python在Scikit-Learn可视化随机森林中的决策树分析房价数据
|
18天前
|
机器学习/深度学习 数据可视化 算法
数据分享|PYTHON用决策树分类预测糖尿病和可视化实例
数据分享|PYTHON用决策树分类预测糖尿病和可视化实例