博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] N-ary Tree Preorder Traversal N叉树的前序遍历
阅读量:6320 次
发布时间:2019-06-22

本文共 1315 字,大约阅读时间需要 4 分钟。

 

Given an n-ary tree, return the preorder traversal of its nodes' values.

For example, given a 3-ary tree:

 

 

Return its preorder traversal as: [1,3,5,6,2,4].

 

Note:

Recursive solution is trivial, could you do it iteratively?

 

这道题让我们求N叉树的前序遍历,有之前那道的基础,知道了二叉树的前序遍历的方法,很容易就可以写出N叉树的前序遍历。先来看递归的解法,主要实现一个递归函数即可,判空之后,将当前结点值加入结果res中,然后遍历子结点数组中所有的结点,对每个结点都调用递归函数即可,参见代码如下:

 

解法一:

class Solution {public:    vector
preorder(Node* root) { vector
res; helper(root, res); return res; } void helper(Node* node, vector
& res) { if (!node) return; res.push_back(node->val); for (Node* child : node->children) { helper(child, res); } }};

 

我们也可以使用迭代的解法来做,使用栈stack来辅助,需要注意的是,如果使用栈的话,我们遍历子结点数组的顺序应该是从后往前的,因为栈是后进先出的顺序,所以需要最先遍历的子结点应该最后进栈,参见代码如下:

 

解法二:

class Solution {public:    vector
preorder(Node* root) { if (!root) return {}; vector
res; stack
st{
{root}}; while (!st.empty()) { Node* t = st.top(); st.pop(); res.push_back(t->val); for (int i = (int)t->children.size() - 1; i >= 0; --i) { st.push(t->children[i]); } } return res; }};

 

类似题目:

 

参考资料:

 

 

转载地址:http://dccaa.baihongyu.com/

你可能感兴趣的文章
JavaScript 精粹 基础 进阶(2)表达式和运算符
查看>>
用gulp搭建小程序开发编译环境
查看>>
js基础语法(1)
查看>>
Java线程同步的几种方式
查看>>
Lambda
查看>>
将本地图片上传至七牛云
查看>>
【深入浅出ES6】Class
查看>>
addEventListener中的EventListener接口对象
查看>>
css3 transform,translate,animation
查看>>
学习Python for Data Science:在数据科学中使用Python库
查看>>
Julia 1.0 中文文档
查看>>
删除数组中指定的一个或多个对象
查看>>
利用SDWebImage将imageStr数组转成image数组
查看>>
Ethereum地址是如何生成的
查看>>
pop() unshift() shift() sass:mixin和function , flex换行, p标签超出省略号
查看>>
数据结构的故事之二叉树, 前缀树, N叉树
查看>>
Kafka学习分享系列
查看>>
阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云
查看>>
聊聊国际化MessageSource
查看>>
05 git 授权失败fatal Authentication failed for 'http xxx'
查看>>