📌  相关文章
📜  打印二叉树中从根到叶的最长路径(1)

📅  最后修改于: 2023-12-03 14:54:27.522000             🧑  作者: Mango

打印二叉树中从根到叶的最长路径

在二叉树中,从根节点到叶子节点的路径称为一条路径。有时我们需要找到一棵二叉树中从根到叶的最长路径,这个过程可以通过深度优先搜索来实现。本文将介绍如何实现这个功能。

算法思路

我们可以使用深度优先搜索来遍历整棵二叉树,并在遍历的过程中保存当前的路径。当遍历到一个叶子节点时,我们可以比较保存的路径长度,更新最长路径。为了方便,我们可以使用一个列表来保存路径,遍历过程中维护这个列表即可。

代码实现

我们可以使用递归函数来实现深度优先搜索。下面是一个 Python 实现的示例代码:

class Node:
    def __init__(self, val=None, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def __init__(self):
        self.res = []

    def findLongestPath(self, root: Node):
        if not root:
            return []
        self.dfs(root, [])
        return self.res

    def dfs(self, root: Node, path: List[int]):
        if not root.left and not root.right:
            path += [root.val]

            # 如果当前路径比之前的最长路径更长,就更新最长路径
            if len(path) > len(self.res):
                self.res = path[:]
            path.pop()
            return

        path += [root.val]
        if root.left:
            self.dfs(root.left, path)
        if root.right:
            self.dfs(root.right, path)
        path.pop()

在上面的代码中,我们定义了一个 Node 类来表示二叉树中的节点。我们还定义了一个 Solution 类来存储答案,其中 self.res 用于保存最长路径。

dfs 函数是核心部分,它接收 root 节点和当前路径 path 作为参数。我们首先将当前节点的值加入到 path 中,并判断当前节点是否为叶子节点。如果是叶子节点,我们比较当前路径和最长路径的长度,并更新最长路径。最后我们将当前节点的值从 path 中弹出,结束递归。如果当前节点不是叶子节点,我们继续递归访问其左子树和右子树。

findLongestPath 函数中,我们判断根节点是否为空,并调用 dfs 函数来寻找最长路径。最后返回 self.res 即可。

总结

本文介绍了如何使用深度优先搜索算法寻找二叉树中从根节点到叶子节点的最长路径。我们使用递归实现了深度优先搜索,并在搜索的过程中保存路径。如果您感兴趣,可以尝试用其他编程语言实现这个算法。

参考链接