📌  相关文章
📜  无递归的 N 叉树的前序遍历(1)

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

无递归的 N 叉树的前序遍历

什么是 N 叉树?

N 叉树是一种多叉树,每个节点可以拥有多个子节点。在 N 叉树中,每个节点的度数(即子节点的个数)是不确定的,可能为 0、1、2 甚至更多。

前序遍历是什么?

前序遍历是一种树的遍历方式,它先访问根节点,然后分别访问它的左子树和右子树。前序遍历的访问顺序是根节点 -> 左子树 -> 右子树。

为什么要使用无递归的方法进行 N 叉树的前序遍历?

在 N 叉树的前序遍历中,如果使用递归的方式,会导致函数的调用栈变得非常深,从而可能出现栈溢出等问题。因此,我们需要使用无递归的方法进行 N 叉树的前序遍历。

使用迭代法实现 N 叉树的前序遍历

在无递归的方法中,我们使用一个栈来辅助进行遍历。步骤如下:

  1. 首先将根节点入栈。
  2. 每次从栈中弹出一个节点,将该节点的所有子节点(如果有的话)都倒序入栈。
  3. 循环执行上述步骤,直到遍历完整棵树。
public List<Integer> preorder(Node root) {
    List<Integer> res = new ArrayList<>();
    if (root == null) {
        return res;
    }
    Stack<Node> stack = new Stack<>();
    stack.push(root);
    while (!stack.isEmpty()) {
        Node curr = stack.pop();
        res.add(curr.val);
        if (curr.children != null) {
            for (int i = curr.children.size() - 1; i >= 0; i--) {
                stack.push(curr.children.get(i));
            }
        }
    }
    return res;
}

以上就是使用迭代法实现 N 叉树的前序遍历的代码。