📅  最后修改于: 2023-12-03 15:22:18.365000             🧑  作者: Mango
二叉树经常是面试算法题的基础,但更广泛的n元树也存在,处理起来略微不同。在本文中,我们将介绍如何使用DFS(深度优先搜索)打印n元树的所有叶节点。
n元树是具有n个子节点的树。与二叉树类似,n元树也具有根节点,每个节点都可以有任意数量的子节点。
DFS是一种递归的算法,它在遍历树(或任何图形)时优先探索分支直到无法前进为止,然后回溯并探索下一个分支。DFS使用堆栈来保存方法调用。因为它是一种递归算法,在树中使用时也很自然。
我们将实现一个函数print_leaves
,它接受一个n元树的根节点,然后打印树中所有叶节点的值。为了实现这个函数,我们将使用递归算法,其中node
代表当前节点:
print_leaves
函数。以下是使用Python实现的代码块:
class NaryTreeNode:
def __init__(self, val=None, children=None):
self.val = val
self.children = children if children else []
def print_leaves(node):
if not node.children:
print(node.val)
for child in node.children:
print_leaves(child)
我们可以使用以下代码段来测试我们的实现,首先创建一个n元树,然后调用print_leaves
函数:
root = NaryTreeNode(1, [NaryTreeNode(3, [NaryTreeNode(5), NaryTreeNode(6)]),
NaryTreeNode(2),
NaryTreeNode(4, [NaryTreeNode(7), NaryTreeNode(8, [NaryTreeNode(9)])])])
print_leaves(root)
运行输出:
5
6
2
7
9
可以看出,函数成功打印出了n元树的所有叶节点。