Title description:
Given an N-ary tree, return the post-order traversal of its node values. For example, given a three-ary tree:
Return to the subsequent traversal: [5,6,3,2,4,1].
Problem solving idea 1: iterative method
Because the sequence of subsequent traversal is: left-right-root. Therefore, it is necessary to traverse in the order of subtree first and root node.
Reference blog: Happy LeetCode's traversal binary tree pre-order, middle-order, post-order, layer order
Code 1: Recursion
Python version:
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def __init__(self):
self.ret = []
def postorder(self, root: 'Node') -> List[int]:
if not root:
return None
for child in root.children:
self.postorder(child)
self.ret.append(root.val)
return self.ret
C++ version:
/*
// 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> ret;
vector<int> postorder(Node* root) {
if (root == nullptr){
return ret;
}
for (auto child:root -> children){
postorder(child);
}
ret.push_back(root->val);
return ret;
}
};
Problem solving idea 2: iterative method
Code 2:
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def postorder(self, root: 'Node') -> List[int]:
if root is None:
return []
stack, output = [root,],[]
output = []
while stack:
node = stack.pop()
if root is not None:
output.append(node.val)
for child in node.children:
stack.append(child)
return output[::-1]
Reference link:
https://mp.weixin.qq.com/s/Gkqk1uZdDWj-ponk0UJiTA
Question source:
https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal