首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

查找二叉树的最深节点。如果多个节点位于最深层,则返回最右侧的Node。(答案在描述中)

查找二叉树的最深节点可以通过深度优先搜索(DFS)或广度优先搜索(BFS)来实现。以下是使用DFS的方法:

  1. 定义一个变量maxDepth来记录当前最大深度,初始值为0。
  2. 定义一个变量rightMostNode来记录最右侧的节点,初始值为null。
  3. 从根节点开始进行DFS遍历,传入当前节点、当前深度和maxDepth。
  4. 在DFS函数中,首先判断当前节点是否为空,如果为空则返回。
  5. 如果当前深度大于maxDepth,则更新maxDepth为当前深度,并将rightMostNode指向当前节点。
  6. 递归遍历当前节点的左子树,深度加1。
  7. 递归遍历当前节点的右子树,深度加1。
  8. 返回rightMostNode作为结果。

以下是示例代码:

代码语言:txt
复制
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def findDeepestNode(root):
    maxDepth = 0
    rightMostNode = None

    def dfs(node, depth, maxDepth, rightMostNode):
        if not node:
            return

        if depth > maxDepth:
            maxDepth = depth
            rightMostNode = node

        dfs(node.left, depth + 1, maxDepth, rightMostNode)
        dfs(node.right, depth + 1, maxDepth, rightMostNode)

    dfs(root, 1, maxDepth, rightMostNode)
    return rightMostNode

这个算法的时间复杂度是O(n),其中n是二叉树中的节点数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • javascript进阶必备的二叉树知识

    每当放完小长假,我都会习惯性的反思和复盘一下自己的技术,尤其是端午节。为什么我会写二叉树的文章呢?其实这涉及到程序员的一个成长性的问题。对于0-3年的前端程序员来说,可能很少有机会涉及到数据结构和算法的工作中,除非去大厂或者做架构相关的工作。但是很多工作2-3年的前端工程师,业务工作已经相对熟悉了,各种技术或多或少也都使用过,那么在这个阶段,对于每个有追求的程序员,是不是应该突破一下自己的技术瓶颈,去研究一些更深层次的知识呢?没错,这个阶段我们最应该了解的就是数据结构,算法,设计模式相关的知识,设计模式和算法笔者在之前的文章中已经系统的总结过了,感兴趣的可以学习了解一下。

    02
    领券