590 N-ary Tree Postorder Traversal N叉树的后序遍历
Description:
Given an n-ary tree, return the postorder traversal of its nodes' values.
Example:
For example, given a 3-ary tree:
Return its postorder traversal as: [5,6,3,2,4,1].
Note:
Recursive solution is trivial, could you do it iteratively?
题目描述:
给定一个 N 叉树,返回其节点值的后序遍历。
示例 :
例如,给定一个 3叉树 :
返回其后序遍历: [5,6,3,2,4,1]。
说明:
递归法很简单,你可以使用迭代法完成此题吗?
思路:
- 递归
- 迭代, 利用栈, 插入结点的孩子结点
时间复杂度O(n), 空间复杂度O(1)
代码:
C++:
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution
{
public:
vector<int> postorder(Node* root)
{
vector<int> result;
if (!root) return result;
stack<Node*> s;
s.push(root);
while (s.size())
{
auto cur = s.top();
s.pop();
result.insert(result.begin(), cur -> val);
for (auto temp : cur -> children) s.push(temp);
}
return result;
}
};
Java:
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val,List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<Integer> postorder(Node root) {
List<Integer> result = new ArrayList<>();
if (root == null) return result;
for (Node node : root.children) result.addAll(postorder(node));
result.add(root.val);
return result;
}
}
Python:
"""
# Definition for a Node.
class Node:
def __init__(self, val, children):
self.val = val
self.children = children
"""
class Solution:
def postorder(self, root: 'Node') -> List[int]:
result = []
def helper(root: 'Node') -> None:
if not root:
return
for item in root.children:
helper(item)
result.append(root.val)
helper(root)
return result