持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情
LeetCode每日一题打卡专栏正式启动!不出意外将日更LeetCode的每日一题,敬请期待。
589: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]
提示:
- 节点总数在范围 内
- n 叉树的高度小于或等于
1000
题解一:递归
直接参照二叉树前序遍历即可,很简单。
C++代码:
/*
// 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> ans;
void dfs(Node* root){
if(root==NULL) return ;
ans.push_back(root->val);
for(int i=0;i<root->children.size();i++){
dfs(root->children[i]);
}
}
vector<int> preorder(Node* root) {
ans.clear();
dfs(root);
return ans;
}
};
题解二:迭代
通过栈模拟递归操作。前序遍历,我们先遍历当前节点,再从左到右遍历其每个子树。由于栈是后进先出的原理,于是我们从右到左入栈,然后出栈顺序便满足了从左到右遍历每个子树。
C++代码:
/*
// 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) {
vector<int> ans;
if(root==NULL) return ans;
stack<Node*> sta;
sta.push(root);
while(!sta.empty()){
Node* now=sta.top();sta.pop();
ans.push_back(now->val);
for(int i=now->children.size()-1;i>=0;i--) sta.push(now->children[i]);
}
return ans;
}
};
Java代码:
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<Integer> preorder(Node root) {
List<Integer> ans=new ArrayList<>();
if(root==null) return ans;
Deque<Node> stack=new ArrayDeque<>();
stack.push(root); //尾部插入
while(!stack.isEmpty()){
Node now=stack.poll(); //检索并删除
ans.add(now.val);
for(int i=now.children.size()-1;i>=0;i--){
stack.push(now.children.get(i));
}
}
return ans;
}
}