LeetCode589. N 叉树的前序遍历

/**
 * 给定一个 n 叉树的根节点  root ,返回 其节点值的 前序遍历 。
 *
 * n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
 *
 *
 * 示例 1:
 *
 *
 *
 * 输入:root = [1,null,3,2,4,null,5,6]
 * 输出:[1,3,5,6,2,4]
 * 示例 2:
 *
 *
 *
 * 输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
 * 输出:[1,2,3,6,7,11,14,4,8,12,5,9,13,10]
 *  
 *
 * 提示:
 *
 * 节点总数在范围 [0, 104]内
 * 0 <= Node.val <= 104
 * n 叉树的高度小于或等于 1000
 *  
 *
 * 进阶:递归法很简单,你可以使用迭代法完成此题吗?
 *
 * 来源:力扣(LeetCode)
 * 链接:https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal
 * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
 */
 
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};

class Solution {
public:
    vector<int> preorder(Node* root) {
        const int PRE_INDEX = 10001;
        stack<Node*> s;
        vector<int> result;
        root == nullptr ? void() : s.push(root);
        while (!s.empty()) {
            root = s.top();
            // the first time to meet the node, print it.
            if (root->val < PRE_INDEX) {
                result.push_back(root->val);
                root->val = PRE_INDEX;
            }

            // no sub node or all node has been been printed, pop the node.
            if (root->val - PRE_INDEX >= root->children.size()) {
                s.pop();
                continue;
            }

            // push the sub node
            s.push(root->children.at(root->val - PRE_INDEX));
            (root->val)++;
        }
        return result;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值