📜  数据结构 |树遍历 |问题 9(1)

📅  最后修改于: 2023-12-03 15:40:00.612000             🧑  作者: Mango

数据结构 | 树遍历 | 问题 9
问题描述

给定一个二叉树,其所有叶节点形成的链表称为叶链。按照从左到右的顺序,返回这个叶链的所有节点。

解决方案

这个问题可以使用深度优先搜索(DFS)来解决。我们需要在遍历过程中记录每个叶节点,并将其加入到链表中。

具体来说,我们可以使用一个函数 dfs 来进行深度优先搜索:

def dfs(node, leaf_list):
    if not node:
        return
    if not node.left and not node.right:
        leaf_list.append(node)
    dfs(node.left, leaf_list)
    dfs(node.right, leaf_list)

这个函数会遍历二叉树,将遇到的每个叶节点加入到 leaf_list 中。

接下来,我们只需要创建一个空链表,并调用 dfs 函数来填充这个链表。最后返回链表的所有节点即可。

下面是完整的代码实现:

class Solution:
    def dfs(self, node, leaf_list):
        if not node:
            return
        if not node.left and not node.right:
            leaf_list.append(node)
        self.dfs(node.left, leaf_list)
        self.dfs(node.right, leaf_list)

    def getLeafList(self, root):
        leaf_list = []
        self.dfs(root, leaf_list)
        return leaf_list
测试样例

我们来测试一下刚刚实现的函数 getLeafList

root = TreeNode(1)
root.left = TreeNode(2)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right = TreeNode(3)
root.right.right = TreeNode(6)

s = Solution()
leaf_list = s.getLeafList(root)
for node in leaf_list:
    print(node.val)

这个测试样例会输出以下内容:

4
5
6

这说明我们的程序已经成功找到了二叉树中的所有叶节点,并将它们按照从左到右的顺序加入到了一个链表中。