Rich LeetCode --- Post-order traversal of 590.N fork tree

Title description:

Given an N-ary tree, return the post-order traversal of its node values. For example, given a three-ary tree:

Insert picture description here
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

Guess you like

Origin blog.csdn.net/weixin_43283397/article/details/111993794