📜  使用DFS打印n元树的所有叶节点(1)

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

介绍

二叉树经常是面试算法题的基础,但更广泛的n元树也存在,处理起来略微不同。在本文中,我们将介绍如何使用DFS(深度优先搜索)打印n元树的所有叶节点。

n元树

n元树是具有n个子节点的树。与二叉树类似,n元树也具有根节点,每个节点都可以有任意数量的子节点。

DFS

DFS是一种递归的算法,它在遍历树(或任何图形)时优先探索分支直到无法前进为止,然后回溯并探索下一个分支。DFS使用堆栈来保存方法调用。因为它是一种递归算法,在树中使用时也很自然。

实现

我们将实现一个函数print_leaves,它接受一个n元树的根节点,然后打印树中所有叶节点的值。为了实现这个函数,我们将使用递归算法,其中node代表当前节点:

  1. 如果节点是叶节点,请打印该节点的值。
  2. 否则,遍历节点的每个子节点,并递归调用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元树的所有叶节点。