【力扣每日一题】力扣589N叉树的前序遍历

题目来源

力扣589N叉树的前序遍历

题目概述

给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。

思路分析

N叉树的前序遍历跟二叉树的差不多,都可以使用递归和迭代的方式实现。

代码实现

java实现

java通过迭代方式实现。

public List preorder(Node root) {
        List res = new ArrayList<>();
        if(root == null) {
            return res;
        }
        Stack stack = new Stack<>();
        Node node = root;
        // 记录这个节点是否已经进入结果集
        Set hasIn = new HashSet<>();
        while (node != null || !stack.isEmpty()) {
            while (node != null) {
                // 向栈中加入
                if (!hasIn.contains(node)) {
                    res.add(node.val);
                    hasIn.add(node);
                    stack.push(node);
                }
                // 替换当前节点为第一个子节点
                if (node.children != null && !node.children.isEmpty()) {
                    node  = node.children.remove(0);
                }else {
                    node = null;
                    stack.pop();
                }
            }
            // 从栈中取出
            if (stack.isEmpty()) {
                node = null;
            }else {
                node = stack.peek();
            }
        }
        return res;
    }

c++实现

c++通过递归方式实现

class Solution {
public:

    vectorres;
    vector preorder(Node* root) {
        if (root == nullptr) {
            return res;
        }
        res.push_back(root->val);
        if (!root->children.empty()) {
            for (Node* node : root->children) {
                preorder(node);
            }
        }
        return res;
    }
}

你可能感兴趣的:(leetcode,算法,java,c++)