📅  最后修改于: 2023-12-03 15:40:00.612000             🧑  作者: Mango
给定一个二叉树,其所有叶节点形成的链表称为叶链。按照从左到右的顺序,返回这个叶链的所有节点。
这个问题可以使用深度优先搜索(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
这说明我们的程序已经成功找到了二叉树中的所有叶节点,并将它们按照从左到右的顺序加入到了一个链表中。